2014-11-14 3 views
2

전체 화면보기를 왼쪽에서 슬라이드하고 전체 공간을 사용하여 애니메이션을 적용하려고합니다.iOS 7에서 iOS autolayout 애니메이션이 작동하지 않지만 iOS 8에서 작동합니다.

나는 아이폰 OS 8에 완벽하게 정상적으로 예상되는 일을하지만, 아이폰 OS 7에 그렇게 실패 다음 코드를했다 : 이것은 아이폰 OS 7 destination.view을에서 실행됩니다 때

[source.view addSubview:destination.view]; 

NSDictionary *viewsDict = @{@"tableView":destination.tableView, 
          @"tapView": destination.tapView, 
          @"destinationView": destination.view}; 

[source.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[destinationView]|" options:0 metrics:nil views:viewsDict]]; 

source.leftConstraint = [NSLayoutConstraint constraintWithItem:destination.tableView 
             attribute:NSLayoutAttributeLeft 
             relatedBy:NSLayoutRelationEqual 
              toItem:source.view 
             attribute:NSLayoutAttributeLeft 
             multiplier:1.0 
              constant:-source.view.bounds.size.width]; 

[source.view addConstraint:source.leftConstraint]; 

source.rightConstraint = [NSLayoutConstraint constraintWithItem:source.view 
             attribute:NSLayoutAttributeTrailing 
             relatedBy:NSLayoutRelationEqual 
              toItem:destination.tapView 
             attribute:NSLayoutAttributeTrailing 
             multiplier:1.0 
              constant:source.view.bounds.size.width]; 

[source.view addConstraint:source.rightConstraint]; 

[source.view layoutIfNeeded]; 

[UIView animateWithDuration:.35f animations:^{ 

    source.rightConstraint.constant = 0; 
    source.leftConstraint.constant = 0; 

    [source.view layoutIfNeeded]; 

}]; 

가 화면에 추가됩니다 애니메이션없이 바로 사용할 수 있습니다. 그게 왜 그럴 수 있겠 어?

+0

당신이이 문제를 해결 했습니까? 같은 문제가 발생했습니다. – tagy22

+0

코드를 약간 변경했는데 iOS 7 및 iOS 8과 일관된 동작을하고 있지만 여전히이 코드는 다르게 동작합니다. – Petar

답변

0

애니메이션 블록은 [source.view layoutIfNeeded]; (How do I animate constraint changes? 참조) 만 포함해야합니다.

이 같은 블록 이전에 대한 제약 조건을 변경해야합니다

[source.view layoutIfNeeded]; 

source.rightConstraint.constant = 0; 
source.leftConstraint.constant = 0; 

[UIView animateWithDuration:.35f animations:^{ 

    [source.view layoutIfNeeded]; 

}]; 
+0

2012 년부터 @session 232 wwdc at 56min 시작 제약 조건을 설정하고 'layoutIfNeeded'를 호출 한 다음 애니메이션 블록에서 제약 조건의 상수를 변경하고'layoutIfNeeded'를 다시 호출해야한다고 설명합니다. 이것은 내가 코드를 따라 갔던 소스이다. – Petar

+0

그 이후로 메 커닉이 변경되었을 수 있습니다. 내 응용 프로그램에서 위의 코드를 사용하고 그것은 모두 IOS 7 & 8에서 일하고 있어요. 어쩌면 당신은 그것을 시도하고 그것이 작동하는지 볼 수 있을까요? –

관련 문제