如何使 iCarousel 视图居中
Posted
技术标签:
【中文标题】如何使 iCarousel 视图居中【英文标题】:How to center iCarousel view 【发布时间】:2012-11-21 04:44:10 【问题描述】:我有 6 个按钮,我想使用 iCarousel 制作动画,代码如下
- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view
UIButton *button = (UIButton *)view;
if (button == nil)
self.icon = [NSMutableArray arrayWithObjects:@"icon-02.png",@"icon-03.png",@"icon-04.png",@"icon-05.png",@"icon-06.png",@"icon-07.png",nil];
//no button available to recycle, so create new one
UIImage *image = [UIImage imageNamed:[icon objectAtIndex:index]];
button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(0.0, 0.0, 130.0f, 130.0f);
[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[button setBackgroundImage:image forState:UIControlStateNormal];
//button.titleLabel.font = [button.titleLabel.font fontWithSize:50];
//[button addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside];
return button;
但是按钮不在中心,现在有没有人热心将轮播放在中心,我已经调整了 uiview 的大小但仍然无法正常工作。 谢谢...
【问题讨论】:
Hey Dave 尝试通过 xib 文件调整包含 iCarousal 的 UIView,增加或减少其宽度/高度,最终轮播将居中....试试这个... @Gill 我想他已经在问题的最后一行提到了这一点。 @Robin 是的,但我已经实现了同样的事情,需要一些尝试和尝试才能把它放在中心...... @Gill,感谢您的提醒,让我再试一次。实际上我希望它在编码中。 在我的例子中,我忘记设置自动调整大小或自动布局约束,所以视图稍微偏离了边缘。 【参考方案1】:carousel 和 carousel 项目默认应该居中(它们在 iCarousel 包含的示例项目中,没有做任何特别的事情)。无需调整笔尖中旋转木马的位置(除非它没有明显居中)。如果这没有按预期工作,您可能发现了一个错误 - 您可以在项目的 github 页面上提出问题吗?
无关:您那里的按钮回收逻辑完全错误,只是巧合。除其他外,您正在重新创建图标数组 6 次。
创建按钮的正确方法是这样的:
- (void)viewDidLoad
[super viewDidLoad];
//set up icons array
self.icon = [NSMutableArray arrayWithObjects:@"icon-02.png",@"icon-03.png",@"icon-04.png",@"icon-05.png",@"icon-06.png",@"icon-07.png",nil];
- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view
UIButton *button = (UIButton *)view;
if (button == nil)
//*************************************************
//do setup that is the same for every button here
//*************************************************
button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(0.0, 0.0, 130.0f, 130.0f);
[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
//button.titleLabel.font = [button.titleLabel.font fontWithSize:50];
//[button addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside];
//*************************************************
//do setup that is different depending on index here
//*************************************************
UIImage *image = [UIImage imageNamed:[icon objectAtIndex:index]];
[button setBackgroundImage:image forState:UIControlStateNormal];
return button;
【讨论】:
您好,尼克,感谢您的回复。是的,事实证明我必须调整笔尖的位置。另一件事,您如何将轮播定义为仅垂直/水平?我在选项演示中看到这是正确的吗? carousel.vertical = !carousel.vertical; 如果你希望它垂直,只需将 carousel.vertical 属性设置为 YES,否则将其设置为 NO(这是默认设置)。 但是说真的,你需要修正你的 if (button == nil) ... 逻辑。在基本的 iPhone 示例中有关于如何正确使用它的说明。 嗨尼克,原来我的按钮在我点击它而不是在右侧之后仍然向上移动,就像我想要的那样。有什么遗漏吗? 是的,正如我现在多次提到的,您 viewForItemAtIndex 中的逻辑是完全错误的。等一下,我会添加一个解释如何正确执行的答案。以上是关于如何使 iCarousel 视图居中的主要内容,如果未能解决你的问题,请参考以下文章
iCarousel 与 iOS 6.1 中具有标签栏控制器的应用程序集成