将自定义 UIView 添加到 iCarousel

Posted

技术标签:

【中文标题】将自定义 UIView 添加到 iCarousel【英文标题】:Adding Custom UIView to iCarousel 【发布时间】:2014-07-25 16:12:13 【问题描述】:

将视图添加到 iCarousel“viewForItemAtIndex”方法时遇到问题

- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view



UIView *sub = nil;
//iCarousel *temp;

//create new view if no view is available for recycling
if (view == nil)

    UIViewController * viewController = [self.storyboard  instantiateViewControllerWithIdentifier:@"UIidentifier"];
    view = [viewController.view viewWithTag:20];

    CGRect  Frame = CGRectMake(view.frame.origin.x, view.frame.origin.y + 100, view.frame.size.width, view.frame.size.height);
    view.frame = Frame;


UILabel *label=(UILabel*)[view viewWithTag:23];
label.text = [[listOfAnimalsNames objectAtIndex:index]nameOfTheCompanie];
return view;


我想显示一个 UIView“mockUp”并使用 iCarousel 的“索引”用一些数据填充标签,我创建了自己的 UIViewController,其中包含“mockup”UIView。问题是当我调用这个 UIView 时(如代码中所示),什么也没有发生。 (我加载数据后使用reloadData方法)

【问题讨论】:

在设置视图框架时尝试使用 view.bounds 而不是 view.frame。 【参考方案1】:

为什么每个视图都需要自己的 ViewController?它们都应该由控制 iCarousel 视图(或至少它的数据源)的任何东西控制。此外,UILabel 应该只实例化一次。

- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view

UIView *sub = nil;

if (view == nil)

    view = [UIView alloc] initWithFrame:CGRectMake(...);
    UILabel *label=[[UILabel alloc] initWithFrame:(...)];
    [view addSubview:label];


label.text = [[listOfAnimalsNames objectAtIndex:index]nameOfTheCompanie];
return view;

【讨论】:

因为我想在 StoryBoard 中以图形方式设计/编辑“模型”,而我不知道其他方法。 不幸的是,由于 iCarousel 显然没有提供与 Storyboard 的适当接口,因此没有无痛的方法可以做到这一点。很多时候,我会在 storyboard 中打开一个 UIView 并进行图形化设计,然后将坐标和帧传递给代码。 现在它正在工作,但我不知道为什么视图的偏移量为 1/2 view.width 和 1/2 view.heigth(我无法上传图片,因为我没有声誉够了) 嗯...这很奇怪。必须是帧来源问题。视野是不是歪了? (即看起来宽度和高度是否小于应有的值) 你为什么使用view.frame.origin.y + 100

以上是关于将自定义 UIView 添加到 iCarousel的主要内容,如果未能解决你的问题,请参考以下文章