如果在viewDidLoad之后添加,则CALayer不可见

时间:2015-02-16 08:14:58

标签: ios objective-c iphone core-animation calayer

我有一个名为TiledScrollViewController的课程,它与UIScrollView完全没有关系。在该视图控制器中,我尝试通过调用bgImageView从应用程序中其他位置的回调向我的视图控制器上的newCylon属性添加CALayer。是。赛昂。这是一个愚蠢的应用程序,但它是一个重要的问题。

这是我创建新圆柱层的方法。

-(CALayer *)newCALayerWithNSString:(NSString *)imageName
                  andCATransform3D:(CATransform3D)transform
                        andCGPoint:(CGPoint)point {
    CALayer *outputLayer = [CALayer layer];
    UIImage *img = [UIImage imageNamed:imageName];
    outputLayer.backgroundColor = [UIColor colorWithPatternImage:img].CGColor;
    [outputLayer setBounds:CGRectMake(0.0, 0.0, img.size.width, img.size.height)];
    outputLayer.transform = transform;
    [outputLayer setPosition:point];
    [outputLayer setZPosition:5.0];

    return outputLayer;
}

以下是我在newCylon中的称呼方式。

-(CALayer *)newCylon{
    NSLog(@"NEW CYLON");
    CALayer *cylon = [self newCALayerWithNSString:@"Cylon"
                                 andCATransform3D:CATransform3DMakeScale(.3, -.3, .3)
                                       andCGPoint:CGPointMake(.5*screenWidth,0)];

    [self.bgImageView.layer addSublayer:cylon]; // this works, but I don't see anything

    [self moveCylon:cylon];
    return cylon;
}

现在。我有一个显示和动画的CALayer,因为我在[self newCylon]内调用了viewDidLoad。但如果我在其他任何地方打电话给newCylon,就不会出现任何问题。我可以通过[self.bgImageView.layer sublayers]验证sublayers数组的大小是否发生了变化。但除了第一个圆筒外,屏幕上没有任何东西出现。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

[CATransaction flush]方法的末尾添加newCylon修复了所有内容。