나는 CALayer를 UIView의 하위 클래스에서 회전 시키려고하는 기본적인 CAAnimation 예제를 사용하고 있습니다. 먼저 새로운 CALayer를 빨간색 배경으로 만들고 self.layer에 삽입합니다. 그런 다음 불투명도 변경시 트리거되어야하는 CAAnimation을 만들어 CALayer에 적용한 다음 예상대로 회전합니다.performAelector afterDelay를 사용한 CAAnimation
필자가 performSelector : withObject : afterDelay :를 사용하여 똑같은 애니메이션을 적용하려고하면 그 불투명도가 여전히 변경되지만 CALayer는 더 이상 움직이지 않습니다. 필자가 performSelector : withObject : afterDelay :를 사용하면 거의 동일한 코드를 사용하여 self.layer를 애니메이션화 할 수 있습니다.
무슨 일이 일어나는지에 대한 아이디어가 있습니까? 여기 내 코드입니다 :
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
point = [[CAGradientLayer alloc] init];
point.backgroundColor = [UIColor redColor].CGColor;
point.bounds = CGRectMake(0.0f, 0.0f, 30.0f, 20.0f);
point.position = CGPointMake(100.0f, 100.0f);
[self.layer addSublayer:point];
[point release];
[self performSelector:@selector(test) withObject:nil afterDelay:2];
}
return self;
}
-(void)test {
[self spinLayer:point];
// [self spinLayer:self.layer]; works here
}
-(CAAnimation*)animationForSpinning {
CATransform3D transform;
transform = CATransform3DMakeRotation(M_PI/2.0, 0, 0, 1.0);
CABasicAnimation *basicAnimation = [CABasicAnimation animationWithKeyPath:@"transform"];
basicAnimation.toValue = [NSValue valueWithCATransform3D:transform];
basicAnimation.duration = 5;
basicAnimation.cumulative = NO;
basicAnimation.repeatCount = 10000;
return basicAnimation;
}
-(void)spinLayer:(CALayer*)layer {
CAAnimation *anim = [self animationForSpinning];
[layer addAnimation:anim forKey:@"opacity"];
layer.opacity = 0.6;
}
이 내 인터페이스
@interface MyView : UIView {
CALayer *point;
}
-(void)test;
-(void)spinLayer:(CALayer*)layer;
-(CAAnimation*)animationForSpinning;
@end
주 : 나는 애플 대리자 내에서 [UIScreen mainScreen].applicationFrame
에 해당하는 프레임이보기를 인스턴스화하고 있습니다.
감사합니다. 귀하의 답변은 매우 유용했습니다. –