CALayer无法渲染或绘图

时间:2011-11-11 01:18:07

标签: iphone ios cocoa-touch core-animation calayer

我在子类UIButton中有一个子类UITableViewCell。该按钮是从笔尖加载的。

我想要用作按钮图像的图像。我想使用CALayer来更好地控制动画。当用户点击按钮时,将发生动画。但是,我甚至无法让图像显示出来。

导入QuartzCore。

我的子类UIButton的代码(总是从笔尖加载):

-(void)awakeFromNib {
    [super awakeFromNib];
    self.clipsToBounds = NO;
    self.backgroundColor = [UIColor clearColor];
    self.opaque = NO;
    self.userInteractionEnabled = YES;
}

表视图控制器中的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    MyCustomCell *cell = (BLCustomCellCenter*)[tableView dequeueReusableCellWithIdentifier:@"customCellID"];
    if (cell == nil) {
        // ... cell is initialized
    }

    // configure the image for the button
    //
    // Note:  there is an outlet to the UIButton called 'customButton' 

    CALayer *imgLayer = [CALayer layer];
    imgLayer.bounds = CGRectMake(0, 0, cell.customButton.bounds.size.width, cell.customButton.bounds.size.height);
    imgLayer.position = CGPointMake(cell.customButton.bounds.size.width/2, cell.customButton.bounds.size.height/2);
     UIImage *img = [UIImage imageNamed:@"someImage"];
    imgLayer.contents = (id)[img CGImage];
    [cell.customButton.layer addSublayer:imgLayer];

    // ... configure subviews of 'customButton'

    return cell;
}

任何帮助都非常感激,一如既往。

2 个答案:

答案 0 :(得分:1)

经过数小时的调试后想出来了。事情(也许我忘了提到)是自定义UITableViewCell是从笔尖加载的。我想查看的子视图也是从笔尖加载的。所以,它是一个笔尖内的笔尖。

Per this wonderful article,在子视图的类中覆盖awakeAfterUsingCoder:就可以了。加载父笔尖时,在子视图上调用超级initUsingCoder:,子视图只加载占位符对象。

这个'占位符'对象导致了我的问题,因为我正在操纵占位符而不是我想要的实际对象。

因此,您必须从笔尖加载并初始化子视图的对象,并通过覆盖NSObject的{​​{1}}来完成此操作。

答案 1 :(得分:0)

设置内容后尝试添加[imgLayer setNeedsDisplay];