myView에 변환을 추가하면 기존의 변환 된 상태가 아니라 변환을 덮어 쓰게됩니다. 즉, 두 번째로 transform = CGAffineTransformMakeRotation (M_PI/2)을 설정하면 실제로 변환이 변경되지 않습니다.
편집 : Rob는 지적했듯이 회전 값이 이미 변환에 저장되어있는 경우 rotationInRadians 속성을 사용할 필요가 없습니다. 대신 당신은 단순히이 같은 기존 변환 수정할 수 있습니다
[UIView animateWithDuration:0.2 animations:^{
_myView.transform = CGAffineTransformRotate(_myView.transform, M_PI/2);
}];
다음은 내가 이전에 제시 한 이상적이지 솔루션입니다.
로테이션을 추적하는 변수가 필요합니다. 회전 할 때마다 원하는만큼이 변수를 증가시킨 다음 변수의 새 값을 기반으로 새로운 변환을 작성합니다.
는 속성이이 작업을 수행 할 수 있도록 :
@property (nonatomic, assign) CGFloat rotationInRadians;
이 init 메소드에서 0으로 초기화합니다. 그런 다음 rotateView 메서드를 수정하여 rotateInRadians을 늘리고 새 변형을 적용합니다.
- (IBAction)rotateView:(id)sender {
self.rotationInRadians += M_PI/2;
[UIView animateWithDuration:0.2 animations:^{
_myView.transform = CGAffineTransformMakeRotation(self.rotationInRadians);
}];
}
놀라운! 고마워. –
이미 뷰의 변형에있을 때 별도의 변수에서 회전을 추적 할 이유가 없습니다. –
좋은 지적입니다. 나는 그것을 외부 변수에 저장하는 것에 이점이 없다. 저는 롭의 대답이 더 간단하고 정확하다고 말하고 싶습니다. – dfmuir