2009-04-30 2 views
2

Xcode에서 새로운보기 기반 응용 프로그램을 만들었습니다. 의 ViewController에서 CATransaction Not Animating

, 나는 수정 한 유일한 코드는 다음과 같습니다

- (void)viewDidLoad { 
[super viewDidLoad]; 

UIView *newView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)]; 
newView.backgroundColor = [UIColor redColor]; 
[self.view addSubview:newView]; 


[CATransaction begin]; 
[CATransaction setValue:[NSNumber numberWithFloat:0.5f] forKey:kCATransactionAnimationDuration]; 

newView.layer.frame = CGRectMake(20,20,220,220); 

[CATransaction commit]; 
} 

그것은 응용 프로그램이로드 되 자마자 0.5 초 애니메이션 빨간색 사각형을 만들어야합니다. 문제는 그것이 움직이지 않는다는 것입니다. 나는 이유를 알 수 없다. 모든 변수를 분리하기 위해이 간단한 프로젝트를 만들었지 만 여전히 작동하지 않습니다.

누구든지 일부 Core-Animation 독서 자료의 올바른 방향으로 나를 도울 수 있습니까? 나는 이미 애플의 모든 것을 다 통과했다.

답변

5

CALayer에서 속성을 설정하면 코드가 예상대로 움직입니다 (기본값으로 애니메이션 처리됩니다). 객체의 그룹에 대한 애니메이션을가 조정되도록

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:1.0f]; 

// Change properties here 

[UIView commitAnimations]; 

CATransactions 그룹 애니메이션에 사용하거나 수동으로 해제 : UIViews 애니메이션을 들어, 다음과 같은 블록 내에서 속성을 변경해야합니다.

+1

"newView.layer.frame = CGRectMake (2020220220);" 그렇지? 'layer'속성은 UIView의 CALayer에 액세스합니다. 그걸 움직여야 겠네, 맞지? – mazniak

+0

네가 맞아, 그 선을 잘못 읽었다. 이 경우 당신이하고있는 일이 움직여야합니다. UIView begin/commit 애니메이션 블록을 사용하는 것이 약간 깔끔하지만, 똑같이 작동해야합니다. –

+2

내가 생각할 수있는 것은 새로운 서브 뷰를 추가 한 후에 애니메이션을 트리거하기 전에 실행 루프가 끝나지 않는다는 것입니다. 따라서보기를 최종 위치에 배치하는 것입니다. 애니메이션 코드를 별도의 메서드로 이동하고 performSelector : withObject : afterDelay :를 사용하여 해당 메서드를 트리거하십시오 (0.01 초 지연). 하위 뷰를 추가 한 후에 애니메이션을 활성화해야합니다. –