당신이 애니메이션을 중지하려면, 당신은 그냥 할 수있는
[layer removeAllAnimations];
애니메이션 숨기기 중에 현재 alpha
을 알고 싶다면 (애니메이션을 뒤집을 수 있도록 올바른 위치에서 다음을 수행 할 수 있습니다.
CALayer *presentationLayer = layer.presentationLayer;
CGFloat startingAlpha = presentationLayer.opacity;
그런 다음 startingAlpha
에서 1.0으로 이동하도록 설정하여 화면을 깜박이지 않고 숨기기 해제를 애니메이션으로 만들 수 있습니다.
블록 기반 애니메이션을 사용하여 실제 애니메이션을 만들 수 있습니다. 그렇지 않은 경우 CABasicAnimation
을 사용할 수 있다고 생각합니다.
따라서, 예를 들어, 다음 (내 예에서, 내가 가지고 "쇼"버튼)과 같은 일을 할 수 있습니다. 나는 블록 애니메이션을 사용하여,하지만 난 너무, 그것은 CABasicAnimation
을 위해 잘 작동 것입니다 의심 :
- (void)reverseAndPauseHide
{
// if we have a "hide" scheduled, then cancel that
if (self.timer)
{
[self.timer invalidate];
self.timer = nil;
}
// if we have a hide in progress, then reverse it
if (self.hiding)
{
[self.containerView.layer removeAllAnimations];
CALayer *layer = self.containerView.layer.presentationLayer;
CGFloat currentAlpha = layer.opacity;
self.containerView.alpha = currentAlpha;
[self show];
}
}
:
이
- (IBAction)onPressShowButton:(id)sender
{
[self showAndScheduleHide];
}
- (void)showAndScheduleHide
{
[UIView animateWithDuration:1.0
animations:^{
self.containerView.alpha = 1.0;
}
completion:^(BOOL finished) {
[self scheduleHide];
}];
}
- (void)show
{
[UIView animateWithDuration:1.0
animations:^{
self.containerView.alpha = 1.0;
}
completion:nil];
}
- (void)scheduleHide
{
self.timer = [NSTimer scheduledTimerWithTimeInterval:5.0
target:self
selector:@selector(startToHide)
userInfo:nil
repeats:NO];
}
- (void)startToHide
{
self.timer = nil;
self.hiding = YES;
[UIView animateWithDuration:5.0
delay:0.0
options:UIViewAnimationOptionAllowUserInteraction
animations:^{
self.containerView.alpha = 0.0;
}
completion:^(BOOL finished) {
self.hiding = NO;
}];
}
당신은 다음을 반전하거나 진행중인 숨기기 일정을 변경하기위한 몇 가지 유틸리티 메소드를 가질 수 있습니다 그런 다음 질문은 당신이 이것을 reverseAndPauseHide
이라고 부르고 언제 scheduleHide
으로 다시 전화 할 것인지를 아는 것입니다. 따라서 예를 들어 터치를 처리 할 수 있습니다 :
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesBegan:touches withEvent:event];
[self reverseAndPauseHide];
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesEnded:touches withEvent:event];
[self scheduleHide];
}
출처
2013-01-22 01:05:52
Rob
ios의 버전은 무엇입니까? – tiguero
iOS6을 사용합니다. iOS5와는 다른 점이 있습니까? – oulipo
아니요 - 나는 UIView에서 블록 기반 애니메이션을 사용하여 UI를 권장 할 생각 이었지만 레이어에서 작동하지 않습니다. – tiguero