2012-10-28 5 views
2

후에 나의 상황을 터치를받지 않습니다 를 나는 그것이 UIView의 카테고리로 선언 된 것 CAKeyframeAnimation로 애니메이션화있어하는 UIButton을했습니다 :있는 UIButton은 CAKeyframeAnimation

CAKeyframeAnimation * scale = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale"]; 
    scale.duration = duration; 
    scale.beginTime = delay; 
    scale.fillMode = kCAFillModeForwards; 

    NSMutableArray * times = [[NSMutableArray alloc] init]; 

    scale.values = values; 
    scale.timingFunctions = times; 

    CAAnimationGroup * group = [CAAnimationGroup animation]; 
    [group setDelegate:self]; 
    [group setDuration:duration + delay]; 
    [group setFillMode:kCAFillModeForwards]; 
    [group setRemovedOnCompletion:NO]; 
    [group setAnimations:[NSArray arrayWithObject:scale]]; 

    [self.layer addAnimation:group forKey:@"scale"]; 

문제는 그 애니메이션 후, 버튼을 터치하지 않습니다. 애니메이션을 제거하면 모두 정상적으로 작동합니다. 누군가 내가 뭘 잘못하고 있는지 알아?

감사

+0

이 게시물에 기쁘게 생각합니다. –

답변

2

애니메이션이 끝나면 self.layer.transform = CGAffineTransformMakeScale(finalScaleX, finalScaleY); 코드의 다음 줄을 삽입해야합니다.

4

당신은 최종 위치에 애니메이션 레이어를 스틱 kCAFillModeForwards 및 removedOnCompletion = NO를 사용하면 안됩니다. 이것은 컨트롤에 대해 작동하지 않으며 사용자가 발견 한 동작을 초래합니다.

대신 애니메이션을 레이어에 추가하기 전에 버튼의 최종 상태를 설정하십시오.

self.layer.transform = CGAffineTransformMakeScale(finalScaleX, finalScaleY); 
[self.layer addAnimation:group forKey:@"scale"]; 
+0

애니메이션은 'initialScale = 0.001f'에서 'finalScale = 1.0f'까지 프레임의 크기를 조정합니다. 그래서'CGAffineTransformMakeScale (finalScaleX, finalScaleY)'를 설정하면 결과가 버튼이 크게 시작한 다음 최종 최종이 더 크게 축소됩니다. 그러나 이것은 제가 찾고있는 애니메이션이 아닙니다. – Fry

+0

어쩌면 UIControls는 어떻게 든 그들의 레이어 (그리고 그것들의 애니메이션)에 특별한 영향을 줄 것입니다. UIImageViews 또한 까다로울 수 있으며 종종 drawRect에서 이미지를 그리는 UIView로 대체됩니다. 줄을 이동하려고 할 수 있습니다. self.layer.transform = CGAffineTransformMakeScale (finalScaleX, finalScaleY); to the animationDidStop : finished : 대리자 메서드입니다. – Thyraz

4

애니메이션은 버튼의 표시 만 변경하지만 터치 대상은 여전히 ​​이전과 같습니다. 완료 후에 애니메이션을 제거하고 버튼에 변형을 설정하거나 프리젠 테이션 레이어를 테스트해야합니다.

hit testing animating layers in a blog post에 대해 자세히 설명하는 내용을 작성했습니다.

관련 문제