specialLayer
이라는 하위 계층이있는보기가 있습니다. 불투명도의 암시 적 애니메이션은 다음과 같이 비활성화됩니다.CABasicAnimation이 끝난 후 레이어의 불투명도를 설정할 수없는 이유는 무엇입니까?
self.specialLayer.actions = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNull null], @"opacity", nil];
이 하위 계층에 액세스하는 방법은 두 가지뿐입니다.
- (void)touchDown {
self.specialLayer.opacity = 0.25f;
}
- (void)touchUp {
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"opacity"];
animation.fromValue = [NSNumber numberWithFloat:self.specialLayer.opacity];
animation.toValue = [NSNumber numberWithFloat:1.0];
animation.duration = 0.5;
animation.removedOnCompletion = NO;
animation.fillMode = kCAFillModeForwards;
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
[self.specialLayer addAnimation:animation forKey:@"opacity"];
}
이 발생합니다
1) 사용자는() 채 버튼을 누르면 및 -touchDown가 호출됩니다. specialLayer의 불투명도가 즉시 0.25
2) 사용자 해제 버튼과 -touchUp이 호출됩니다. specialLayer의 불투명도가 1.0으로 돌아갑니다
이 시퀀스는 오직 한 번만 작동합니다!
3) 사용자가 버튼을 다시 누르면 (누른 상태) -touchDown이 호출됩니다. 그러나 specialLayer의 불투명도는 화면에서 변경되지 않습니다! self.specialLayer.opacity = 0.25f;
이 호출 되더라도 아무 일도 발생하지 않습니다. 불투명도는 1.0f로 유지됩니다.
4) 사용자가 손가락을 들어 올리고 -touchUp이 호출됩니다. specialLayer의 불투명도 JUMPS를 0.25로 설정하고 거기에서 1.0f로 애니메이션을 만듭니다.
NSLog를 검사하여 메서드가이 순서대로 호출되는지 확인했습니다. 그들이하다.
애니메이션 코드의 주석 처리를 제거하고 불투명도를 1.0으로 직접 설정하면 후속 직접 불투명도 변경이 즉시 적용됩니다. 확실히 문제를 일으키는 것은 CABasicAnimation입니다. 암시 적 애니메이션을 비활성화하는 코드를 제거해도이 문제가 발생하지 않습니다.
나는 여기서 무슨 일이 일어나는지 알아낼 수 없다. 불투명도에 대한 CABasicAnimation을 추가 한 후 CALayer가 내가 설정 한 불투명도 값을 반영하지 않는 이유는 무엇입니까? 이거 버그 야?
내가 뭘 잘못하고 있니?
레이어 불투명도가 무엇을 의미합니까? 애니메이션을 추가하기 전에 레이어 불투명도의 최종 값을 설정해야합니다. like layer.opacity = 1.0 – msk
자세한 내용으로 질문을 업데이트했습니다. –
@ ProudMember : 내 대답을 읽었습니까? 맨 처음 문장은 근본적인 문제를 설명합니다. 궁금한 점이 있으면 알려주십시오. –