如何使 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 视图居中的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 中的 ICarousel

如何删除默认的 iCarousel 项目居中位置?

iCarousel 居中项目的位置 (iOS)

iCarousel 与 iOS 6.1 中具有标签栏控制器的应用程序集成

如何使 iCarousel 与 UITableViewController 中的 headerView 一起工作

如何在 iCarousel 的 cellview 中居中元素?