2013-05-21 65 views
0

在我的應用程序中,我爲UIImageView添加了遮罩,並將其設置爲半透明。此外,CALayer上還有一個CAAnimation正在運行。在遮罩層上詢問CATextLayer

現在,我想在它上面添加一個CATextLayer,它不能被遮罩層影響。我怎樣才能做到這一點?

謝謝

編輯:出現了一個新問題。不知何故,如果發送給CATextLayer的消息是在animationDidStart中發送的,則動畫將以相反的順序執行。

- (void)viewDidLayoutSubviews { 

for (int i=1; i<6; i++) { 
    NSString* intValue = [NSString stringWithFormat:@"%d", i]; 

    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"path"]; 

    animation.duration = 0.5; 

    animation.delegate = self; 

    animation.repeatCount = 0; 

    animation.autoreverses = NO; 

    [animation setValue:intValue forKey:@"animationString"]; 

    animation.timingFunction = nil; 

    [animation setRemovedOnCompletion:NO]; 

    [animation setFillMode:kCAFillModeForwards]; 

    animation.fromValue = (id) [self getCGRectForZoomLevel:i]; 

    animation.toValue = (id) [self getCGRectForZoomLevel:i + 1 ]; 

    animation.beginTime = CACurrentMediaTime() + i * 2; 

    [self.shapeLayer addAnimation:animation forKey:intwaarde]; 


} 

}

回答

0

我終於找到了解決方案。因爲我已經把動畫放在 - (void)viewDidLayoutSubviews

一切都出錯了。我把它放在那個方法中,因爲它原來是github中的其他人的項目。

2

你應該重新考慮你的層次結構。

添加的視圖,以組容器中的圖像視圖和文本層,使得它們的兄弟姐妹(相比於現在當文本層是圖像視圖的子層)

然後,只需掩模圖像視圖就像你已經在做的一樣。

Container // ⬅ this one is new 
    ┃ 
    ┣━━ Image view ┅ (mask) 
    ┃ 
    ┗━━ Text layer // ⬅ is now a sibling 
+0

@Rönnqvist謝謝David!但是,我想在動畫即將開始時更新此文本層,如下所示:' - (void)animationDidStart :(CAAnimation *)theAnimation self.textLayer.string = [theAnimation valueForKey:@「animationString 「]; }' –

+0

什麼是將動畫添加到圖層?您仍然可以成爲動畫的代表並使用'animationDidStart:'來對它作出反應。問題在於你應該在哪裏作爲代表 –

+0

這正是我所做的和animationDidStart的確被調用的。但是,以 - (void)animationDidStart調用self.textLayer以某種方式取消即將開始的動畫。 self.textLayer不是動畫播放的圖層。 –