2017-03-10 3 views
0
나는 사용자가 스크롤 매핑 할 때 이동 버튼을 애니메이션을 적용 할

내 아이폰 OS 응용 프로그램에서 (즉, GMSMapView을 입력있다) :GMSMapView가 이동할 때 어떻게 NSLayoutConstraint에 애니메이션을 적용 할 수 있습니까?

- (void)setButtonHidden:(bool)hidden 
    [UIView animateWithDuration:1 animations:^{ 
     [_myButton setAlpha:hidden ? 0 : 1]; 
     // or so: 
     [_myButtonConstraint setConstant:hidden ? -40 : 92]; 
     [[self view] layoutIfNeeded]; 
    } 
} 

버튼 보여주는 애니메이션이 완벽하게 작동하지만, 숨어 애니메이션되지 않습니다.

나는 mapView:willMove: 메서드에서 [self setButtonHidden:YES]을 호출하기 때문에 그 이후에지도보기가 애니메이션으로 표시 될 것이라고 생각합니다.

다른 애니메이션 (이 경우 내 애니메이션 및 GMSMapView 애니메이션)을 어떻게 결합 할 수 있습니까?

+0

알파 값없이 확인하셨습니까? – karthikeyan

+0

예, 알파가없는 제약 값을 통해 움직이게하려고했습니다. 나중에 테스트 할 때 알파 값을 추가 했는데도 결과가 동일합니다. 숨기기가 움직이지 않는 경우 –

+0

-40 대신에 0을 설정하고 확인한 다음 레이아웃 문제가 있는지 여부를 확인할 수 있습니다. 이 높이 레이아웃 제약 또는 폭입니까? – karthikeyan

답변

1

해결책을 찾았습니다. 이유는 GMSMapView bug

솔루션입니다 :

dispatch_async(dispatch_get_main_queue(), ^{ 
    [UIView animateWithDuration:1 animations:^{ 
     [_myButton setAlpha:hidden ? 0 : 1]; 
     // or so: 
     [_myButtonConstraint setConstant:hidden ? -40 : 92]; 
     [[self view] layoutIfNeeded]; 
     // or any other animation 
    }]; 
}); 

감사 모든 도움을!

0

애니메이션을 결합 할 수 있지만 hidden은 단지 켜기/끄기 만 할 수 있습니다. 먼저 알파를 조정하고 (숨겨진 상태는 아니지만) 완료 블록에서 숨김으로 설정합니다.

[UIView animateWithDuration:1 
        animations:^{ 
         _myButton.alpha = hidden ? 0 : 1; 
         // or so: 
         [_myButtonConstraint setConstant:hidden ? -40 : 92]; 
         [[self view] layoutIfNeeded]; 
        } completion:^(BOOL finished) { 
         _myButton.hidden = hidden ? YES : NO; 
        }]; 
+0

감사하지만 결과는 같습니다. 'GMSMapView'가 내 애니메이션을 방해하는 것처럼 보입니다. ( –

관련 문제