2017-03-30 3 views
0

썸네일 프레임과 전체 화면 프레임 사이에 대화식 애니메이션을 만들려고합니다. 위쪽으로 이동하면 양방향으로 프레임이 커지므로 (전체 화면에 도달 할 때까지) 아래로 이동하면 반대 방향으로 이동합니다. YouTube가 동영상 플레이어를 움직이는 방식과 매우 유사합니다.프레임 간의 제스처 구동 애니메이션

나는 UIPanGestureRecognizer 및 인식기 상태가 UIGestureRecognizerStateEnded 때, 활성화 그래서 같은 POPSpringAnimation를 사용하여 시도

:

- (void)didPan:(UIPanGestureRecognizer *)recognizer 
{ 
    CGPoint point = [recognizer translationInView:self.view.superview]; 
    self.view.center = CGPointMake(self.view.center.x, self.view.center.y + point.y); 
    [recognizer setTranslation:CGPointZero inView:self.view.superview]; 
    if (recognizer.state == UIGestureRecognizerStateEnded) 
    { 
     CGPoint velocity = [recognizer velocityInView:self.view.superview]; 
     // Initaite POPSpringAnimation using velocity and target frame 
     // either fullscreen or thumbnail 
    } 
} 

이것의 효과는 볼의 중심은 그 크기가됩니다 패닝 동안 업데이트 만 가져옵니다이다 이동을 중지 한 후에 만 ​​변경이 시작됩니다. didPan:에서 프레임의 크기를 수동으로 조정할 필요가 없습니다.

단순히 프레임 A에서 프레임 B로 이동하는 패닝 구동 애니메이션을 만들 수 있습니까?

This 프레임 워크는 거의 동일하지만 애니메이션은 대화 형이 아닙니다. 같은 일이 this 대답에 간다.

답변

2

iOS 10에 추가 된 클래스 UIViewPropertyAnimator을 사용하는 것이 좋습니다. 애니메이션을 쉽게 일시 중지, 되감기 또는 스크러빙 할 수 있습니다.

https://github.com/DuncanMC/UIViewPropertyAnimator-test

클래스는 실제로 꽤 간단합니다 : 당신이 목표 - C를 사용하고 있기 때문에

나는, 당신은 따라하기가 어렵게 될 수도 GitHub의 (스위프트의 글에 데모 프로젝트를 가지고 사용하면 코드에서 코드를 따를 수없는 경우에도 사용할 수있는 API에 대한 로드맵으로 샘플 프로젝트가 제공 될 수 있습니다.

+0

감사합니다. 제스처 인식기의 속도를 존중하는 방법이 있습니까? 예에서 슬라이더를 가볍게 치기 만하면 애니메이션이 즉시 멈 춥니 다. 그것의 손가락을 벗어. POP와 UIView의 애니메이션 메서드 모두 초기 속도로 애니메이션을 초기화 할 수 있지만 UIView Property Animator에서 이러한 기능을 지원하지는 못합니다. –

+0

손가락을 뺄 때 슬라이더가 계속 움직이지 않습니다. 그들은 속도의 개념을 가지고 있지 않습니다. 원하는 것을 수행하는 자체 컨트롤을 작성한 다음 원하는대로 애니메이션을 제어하는 ​​방법을 찾아야합니다. 제스처 동작을 한 후 일정한 속도로 작동 시키거나 감속 시키시겠습니까? –

+0

사실, UISpringTimingParameters의 인스턴스를 UIViewPropertyAnimator에 전달하여 속도를 사용할 수 있다는 것을 발견했습니다. 고마워, 고마워. UISpringTimingParameters에는 initialVelocity에 대한 인수가 있습니다. –

관련 문제