동시에 수정할 필요가있는 CALayer/CAShapeLayer/CATextLayer 개체가 있지만 하위 집합 만 애니메이션으로 만들어야합니다. 내가 애니메이션을 원하지 않는 레이어를 들어, 내가 CATransaction에서 업데이트를 포장하는 것은 다음과 같이 호출CATransaction 애니메이션 발생 setDisableActions : YES
- (void) setPlayerName:(NSString *)playerName
{
_playerName = playerName;
[CATransaction begin];
[CATransaction setDisableActions:YES];
[self updateNameLayer]; // Layer property updates happen in here
[CATransaction commit];
// Update the screen
[self setNeedsLayout];
[self setNeedsDisplay];
}
내가 CATransaction
의 [CATransaction setDisableActions:YES];
외부 내가 애니메이션이 될 수 실현/커밋 통화를 시작 사용 때까지 아니었다 동시에 애니메이트되도록 설정된 개별 오브젝트에 영향을줍니다. 이 경우 해당 업데이트에 대한 모든 애니메이션이 비활성화되었습니다.
해결책은, 해당 트랜잭션에 대한 setDisableActions : 호출을 현지화하기 위해 CATransaction
begin/commit 호출에서 각 업데이트를 명시 적으로 래핑하는 것이라고 생각했습니다. 이 작업을 수행 한 후에도 여전히 애니메이션이 전부 또는 아닌 것으로 보입니다. CATransaction의 작동 방식을 충분히 이해하지 못하는 것 같아서 나에게 들립니다.
여러 개의 동시 CALayer 암시 적 애니메이션 속성 업데이트를 처리하는 유일한 방법은 무엇입니까? 이러한 업데이트 호출 및 레이어는 여러 객체에 분산되어 있습니다.
서로 얽혀있는 애니메이션 및 애니메이션이 아닌 변경 사항을 혼합하여 일치시키려는 경우,이 방법은 마치 겉보기에는 발견 한 것처럼 작동하지 않습니다. 특정 속성에 대한 애니메이션을 비활성화하는 방법은'[CALayer actionForKey :]'를보십시오. –
이 경우 모든 CATransaction 블록을 제거하고 대신 속성 업데이트 전에'actionForKey :'를 사용 하시겠습니까? –
actionForKey를 사용하면 지정된 레이어 속성의 모든 애니메이션을 비활성화 할 수 있습니다. 그것은 CALayer 서브 클래스에서 정의한 것이지 호출하는 것이 아닙니다. –