2015-02-16 1 views
0

У меня есть класс под названием TiledScrollViewController, который совсем не связан с UIScrollView. В этом представлении контроллер, я пытаюсь добавить CALayer в свойство bgImageView на моем контроллере просмотра из обратного вызова в другом месте приложения, вызвав newCylon. Да. Cylon. Это глупое приложение, но это важный вопрос.CALayer не отображается, если добавлен после просмотраDidLoad

Вот как я создаю свои новые слои цилиндра.

-(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 меняется. Но на экране ничего не появляется, кроме первого цилиндра.

Что я делаю неправильно?

+0

Вы должны назвать свои аргументы за то, для чего они используются, а не то, что они есть. –

ответ

0

Добавление [CATransaction flush] до конца моего newCylon метод исправил все.