2010-03-24 3 views
0

일련의 (상자) 행이 화면에 표시되며, 내 메인보기의 모든 하위보기가 있습니다. 각각은 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]; 

를 호출하는 이유

+1

나는 당신의 문제를 보았다 - 당신이보기 초기화와'frame.origin.x' 선언이 있어야하는 주석을 사용하고있다! :)하지만 진지하게, add-view 블록의 마지막 라인은'[self stagingView];가 될 것인가, 아니면 ('addSubview :'에 대한 호출처럼) 뭔가 빠졌습니까? – Tim

+0

[self stagingView]는 무엇입니까? 해야 할 것? stagingView를 하위 뷰로 추가하는 위치는 어디입니까? "또는 아마도 애니메이션없이 최종 위치로 이동할 수 있습니다."명확하게 할 수 있습니까? 그들은 움직이거나 움직이지 않습니까? – pheelicks

+0

어, 예, 오타가 수정되었습니다. :) 물론 그것은 복사, 붙여 넣기, 편집을 위해 명확하게하기 위해 맹 글링 된'addSubview :'에 대한 호출입니다. –

답변

1

은 덧글과 마찬가지로, 나는 궁금 :. 나는 또한 당신이 어딘가에 그것을했다고 상상했지만, 당신이 예제 코드에서 그것을 하위 뷰로 추가하지 않은 이유에 대해서 궁금해한다.

1.Don't 개별적으로 "상자"애니메이션 :

내가 도움이 될 두 가지가 있습니다. 그들을위한 컨테이너보기를 만든 다음 컨테이너보기에 애니메이션을 적용하면됩니다. 단순한!

또는

2.Don't 제대로 작동하려면 [보기 파단]에 의존하고 있습니다. 이동하려는 상자 (ivar)의 배열을 그대로 유지하고 대신 반복합니다.

+0

어, 네, 응급실에 결로가 있습니다. 그 전화는 실제로'addSubview :'에 대한 호출입니다 - 고정! 제안 해줘서 고마워.그것들 중 하나 또는 둘 모두를 시도 할 것입니다; 내가 왜 [서브 뷰보기]를 믿을 수 없어야 하는지를 모르겠지만 여기가 진실의 원천이어야한다. –

+0

사용자 오류가 발생하지 않도록해야합니다. 예를 들어 나중에 다른 목적으로 하위보기를 추가하기로 결정한 경우 –

+0

여기에 관심을 가져 주셔서 감사합니다. 질문의 본문에 업데이트/수정 사항이 있음을 알았습니다. 왜 그 수정본이 작동하는지 압니까? 감사. –

관련 문제