일련의 (상자) 행이 화면에 표시되며, 내 메인보기의 모든 하위보기가 있습니다. 각각은 UIView입니다. 나는 그것들을 모두 왼쪽으로 옮기고 새로운 시각을 가지고 오른쪽에서 잠금 단계로 들어가기를 원합니다.UIView 애니메이션 중 일부에 애니메이션을 적용합니다.
다음[UIView beginAnimations:@"shiftLeft" context:NULL];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(_animationDidStop:context:)];
[UIView setAnimationDuration:0.3];
for (UIView * view in [self subviews]) {
CGRect frame = [view frame];
frame.origin.x -= (frame.size.width + viewPadding);
[view setFrame:frame];
}
[UIView commitAnimations];
내가 기대하는 내용은 다음과 같습니다 (I 방금 추가 한 하나를 포함하는)
// First add a dummy view offscreen
UIView * stagingView = /* make this view, which sets up its width/height */
CGRect frame = [stagingView frame];
frame.origin.x = /* just off the right side of the screen */;
[stagingView setFrame:frame];
[self addSubview:stagingView];
을 그리고 난 내 파단 모두를위한 하나 개의 블록에 애니메이션을 설정 : 여기에 내가 뭘하는지입니다 : 이미 화면에 표시된 (3 개의)보기가 왼쪽으로 이동하고 새로 준비된보기가 동시에 오른쪽에서 행진합니다.
다음과 같은 현상이 발생합니다. 새로 스테이지 된보기가 예상대로 애니메이션되고 화면의 이미보기가 전혀 움직이지 않는 것처럼 보입니다. (아니면 애니메이션없이 최종 위치로 이동합니다.)
그리고! 스크린 밖에서 새 서브 뷰를 만드는 모든 업무를 주석 처리하면 ... 을 수행하면이 올바르게 작동합니다!
허?
UPDATE : 일부는 더 주위를 파고 후, 나는 놀라운 것을 발견 : 나는이 애니메이션이 설정 시간 사이라고하면 어떤 작업을 수행하지 않고 layoutSubviews
수익의 내 사용자 지정 하위 클래스를 만들어 문제를 해결하고, 수를 완료 시간. 이 방법은 오리엔테이션 변경 중에 이러한 하위 뷰의 위치를 조정하기 위해 일부 작업을 수행해야합니다. 그러나 나는이 방법으로 애니메이션의 상호 작용을 실제로 이해하지 못합니다. 결국 애니메이션이 끝나면 실제로는 결국 아무 것도하지 말아야한다고 생각합니다. 아무도 나에게 상호 작용을 설명 할 수 있습니까? 나는 계몽주의에 가깝지만 아직 거기에 있지 않은 것처럼 보인다. 감사! 당신은 내가 당신의 drawRect를 실행하려고 때문입니다 상상
[self stagingView];
를 호출하는 이유
나는 당신의 문제를 보았다 - 당신이보기 초기화와'frame.origin.x' 선언이 있어야하는 주석을 사용하고있다! :)하지만 진지하게, add-view 블록의 마지막 라인은'[self stagingView];가 될 것인가, 아니면 ('addSubview :'에 대한 호출처럼) 뭔가 빠졌습니까? – Tim
[self stagingView]는 무엇입니까? 해야 할 것? stagingView를 하위 뷰로 추가하는 위치는 어디입니까? "또는 아마도 애니메이션없이 최종 위치로 이동할 수 있습니다."명확하게 할 수 있습니까? 그들은 움직이거나 움직이지 않습니까? – pheelicks
어, 예, 오타가 수정되었습니다. :) 물론 그것은 복사, 붙여 넣기, 편집을 위해 명확하게하기 위해 맹 글링 된'addSubview :'에 대한 호출입니다. –