2011-10-12 6 views
1

나는 UIView에 여러 개의 애니메이션 가능/대화 형 UIImageViews가있어 사용자 접촉을 기반으로 애니메이션/상호 작용합니다. 이 애니메이션 가능/대화 형 UIImageViews 아이콘을 터치하여 화면에서 대화 형 객체를 식별하는 데 도움이되는 "흔들림"기능을 추가하려고합니다. 나는 this 블로그에서 "호기심"운동을 달성하기 위해 다음 코드를 사용하는 것을 시도하고있다 :객관적인 C로 흔들리는 애니메이션

-(void)doWiggle:(UIView *)touchView { 
    // grabbing the layer of the tocuhed view. 
    CALayer *touchedLayer = [touchView layer]; 
    // here is an example wiggle 
    CABasicAnimation *wiggle = [CABasicAnimation animationWithKeyPath:@"transform"]; 
    wiggle.duration = 0.1; 
    wiggle.repeatCount = 1e100f; 
    wiggle.autoreverses = YES; 
    wiggle.toValue = [NSValue valueWithCATransform3D:CATransform3DRotate(touchedLayer.transform,0.1, 0.0 ,1.0 ,1.0)]; 
    // doing the wiggle 
    [touchedLayer addAnimation:wiggle forKey:@"wiggle"]; 
    // setting a timer to remove the layer 
    [NSTimer scheduledTimerWithTimeInterval: 2.0 target:self selector:@selector(endWiggle:) userInfo:touchedLayer repeats:NO]; 
} 

-(void)endWiggle:(NSTimer*)wiggleTimer { 
    // stopping the wiggle now 
    [((CALayer*)wiggleTimer.userInfo) removeAllAnimations]; 
} 

내 루틴에서 다음과 같이 호출 : [self doWiggle:imageAnimation];를 imageAnimation가있는 UIImageView입니다. 나는 흔들 거리는 동안 이미지의 절반이 사라지는 것을 봅니다. 나는 이것이 작동하기 위해서는 z- 인덱스를 적절하게 설정해야한다고 읽었습니다. Z- 인덱스를 설정하려면 무엇이 필요합니까? 그리고 페이지 당 3 ~ 4 UIImageViews가 있는데 doWiggle : routine을 호출해야합니다. 모든 UIImageViews의 z- 인덱스를 수정해야합니까?

+0

제거를 위해 타이머를 예약 할 필요가 없습니다. 반복 횟수를 2.0/0.1로 설정하면됩니다. 애니메이션은 완료되면 레이어에서 자동으로 제거됩니다. – nielsbot

답변

0

당신이 doWiggle를 호출하기 전에,이 코드를 수행해야 할 수 있습니다 :

[[터치 뷰 수퍼] bringSubviewToFront : 터치 뷰]

애니메이션을 수행하기 전에 전체보기를 볼 수 있다면 문제가 해결되지 않을 수도 있습니다. 이미지가 이미지 뷰에 의해 축척되어 애니메이션 중에 문제가 발생할 수 있습니다. 이미지 편집 프로그램을 사용하여보기의 크기를 조정하지 않고보기에 맞게 이미지의 크기를 조정해야 할 수도 있습니다. 정적 이미지가 없으면 (예 : 네트워크로드 오프 등) 프로그래밍 방식으로이 작업을 수행 할 수도 있습니다.

관련 문제