2013-05-17 3 views
1

iPhone 5의 큰 화면 용 iPhone 앱을 업데이트하고 있는데 animateWithDuration:에 문제가있는 것 같습니다. autolayout을 켜기 전에 UITextField가 첫 번째 응답자 상태가되면 인터페이스 요소가 화면 위로 약간 이동하고 UITextField가 첫 번째 응답자 상태를 잃어 버렸을 때 인터페이스 요소가 원래 위치로 다시 아래로 이동합니다. 이제, 그들은 단지 우연히 화면을 오갔다가 나는 이유를 모르겠습니다. 나는 아래의 코드를 사용하여 개체를 이동 (및 자동 레이아웃을 끄고이 일) :AutoLayout 및 animateWithDuration 문제

[UIView animateWithDuration:.25 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{ 
    int offset = 160; 
    [object1 setFrame:CGRectMake(0, -offset, object1.frame.size.width, object1.frame.size.height)]; 
    [object2 setFrame:CGRectMake(object2.frame.origin.x, object2.frame.origin.y-offset, object2.frame.size.width, object2.frame.size.height)]; 
    [object3 setFrame:CGRectMake(object3.frame.origin.x, object3.frame.origin.y-offset, object3.frame.size.width, object3.frame.size.height)]; 
      } 
       completion:^(BOOL finished){}]; 

그것이 일정한하여 개체를 이동하려고 함께 할 수있는 뭔가가 있나요? offset0으로 설정해도 모든 개체가 여전히 화면에서 벗어납니다. 내가 어떤 화면이 장치를 가지고 감지하고 다른 금액으로 개체를 움직이는 시도했지만, 그 중 하나를 작동하지 않았습니다. 아무도 아이디어가 있니?

미리 감사드립니다.

+1

자동 레이아웃과 프레임 애니메이션이 서로 충돌합니다. 나는 이것을 iOS 6의 가장 큰 실수로 간주한다. 솔루션은 내 책 http://www.apeth.com/iOSBook/ch17.html#_animation_and_autolayout을 참조하십시오. – matt

답변

2

자동 레이아웃을 사용하는 경우보기에 수동으로 추가 된 객체가 translatesAutoresizingMaskIntoConstraints = YES이 아닌 경우 autolayout은 프레임을 변경하여 애니메이션을 시도하지 못하게합니다. 제자리에 제약 조건이 다시 적용될 수있는 경우 개체는 제약 조건이 지정되어야하는 곳으로 돌아가서 frame 속성을 조정하려는 시도를 무시합니다.

자동 레이아웃 사용하는 동안 다음과 같은 객체의 움직임을 애니메이션, 당신도 (a)는 자신의 최고 구속에 대한 IBOutlet을 만들 것입니다 경우 (y을 조정하는 경우는 x을 조정하는 경우도, 당신은 또한 주요 제약 조건을 사용) 한 후 해당 제약 조건의 constant 속성을 변경 한 다음 layoutIfNeeded을 애니메이션 블록 내에서 호출하십시오. 또는 (b) 제약 조건을 제거하고 새로운 제약 조건을 생성합니다. (저는 일반적으로 전자를합니다.)

제약 조건에 대해 IBOutlet을 생성 한 다음 애니메이션 블록에서 constant 속성을 변경하는 방법의 예는 this answer의 뒷 부분을 참조하십시오.