2016-12-26 9 views
1

안녕 얘들 아, 내 애니메이션을 사용자가 패닝하는 방식에 따라 좌우로 움직 이도록 만들려고 노력하고 있지만 작동하지 않아 잘못된 것을 파악할 수 없습니다. 제스처는 한 방향으로 만 작업 할 때 올바르게 작동했지만 moveLabel() 함수로 로직을 옮기면 더 이상 작동하지 않습니다. 애니메이션이 시작되지 않습니다. 내 목표는 동일한 애니메이션을 가지고 있기 때문에 (더 자세한 내용을 추가 할 것이므로) 팬 방향에 따라이 특정 레이블을 왼쪽이나 오른쪽으로 움직여야합니다. 이것은 지금 내 추위입니다UIViewPropertyAnimator 팬 방향에 따라 움직이는 애니메이션

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet weak var labelDummy: UILabel! 

    var labelAnimation = UIViewPropertyAnimator() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     labelDummy.center.x = view.bounds.maxX/2 

     view.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: #selector(self.moveLabel))) 

    } 


    func moveLabel(gesture: UIPanGestureRecognizer){ 

     let trans = gesture.translation(in: view) 

     if trans.x >= 0{ 
      labelAnimation = UIViewPropertyAnimator(duration: 1.0, curve: .easeInOut) { 

       let yPos = self.labelDummy.center.y 
       self.labelDummy.center = CGPoint(x: 100 + (self.labelDummy.frame.size.width/2), y: yPos) 
      } 
     } 

     if trans.x < 0 { 
      labelAnimation = UIViewPropertyAnimator(duration: 1.0, curve: .easeInOut) { 

       let yPos = self.labelDummy.center.y 
       self.labelDummy.center = CGPoint(x: 10 + (self.labelDummy.frame.size.width/2), y: yPos) 
      } 
     } 

     labelAnimation.fractionComplete = abs((trans.x/100)) 


     if gesture.state == .ended{ 

      labelAnimation.fractionComplete = 0 
     } 

     print("fractionCompleted: ", labelAnimation.fractionComplete) 
    } 
} 

이 문제를 어떻게 해결할 수 있습니까?

일하는 코드 :

import UIKit 

class ViewController: UIViewController { 

@IBOutlet weak var labelDummy: UILabel! 

var labelAnimation = UIViewPropertyAnimator() 

override func viewDidLoad() { 
    super.viewDidLoad() 


    labelDummy.center.x = view.bounds.maxX/2 

    // Pan for hele viewen som spiller label animasjon 

    view.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: #selector(self.moveLabel))) 

    // animasjon 

    labelAnimation = UIViewPropertyAnimator(duration: 1.0, curve: .easeInOut) { 

     let yPos = self.labelDummy.center.y 
     self.labelDummy.center = CGPoint(x: 10 + (self.labelDummy.frame.size.width/2), y: yPos) 
    } 

    //labelAnimation.startAnimation() 
} 

func moveLabel(gesture: UIPanGestureRecognizer){ 

    print("retning: ", gesture.velocity(in: view).x) 
    let trans = gesture.translation(in: view) 
    print("trans: ", trans) 

    labelAnimation.fractionComplete = trans.x/100 
    print("fractionCompletet prøver å settes til : ", trans.x/100) 
    print(trans.x) 

    if gesture.state == .ended{ 
     print("-ENDED-") 
     labelAnimation.fractionComplete = 0 
    } 

    print("fractionCompletet: ", labelAnimation.fractionComplete) 
} 

가}

답변

0

이 x 위치에 대한 전역 변수를 만들기까지 종료하고 moveLabel 기능에 나는 경우에 사용 ".began 경우"와 같은 문장 뭔가가, 그런 다음 번역을 확인하십시오. 번역이 0보다 높거나 낮은 지 여부에 따라 xposition을 왼쪽 어딘가에, 또는 어딘가에 오른쪽 어딘가에 설정하십시오.

if gesture.state == .began { 

     if gesture.velocity(in: view).x > 0{ 

      // Panning right, Animate Left 
      self.animationDirection = .left 
      self.animateToXPos = CGPoint(x: headerLabelPositionLeft!, y: headerLabelPositionY!) 
      self.setAnimation(direction: AnimationDirection.left) 
      self.dayLabel.textAlignment = .left 

     } else { 

      // Panning left, Animate Right 
      self.animationDirection = AnimationDirection.right 
      self.animateToXPos = CGPoint(x: self.view.bounds.width - (self.dayLabel.frame.size.width/2), y: headerLabelPositionY) 
      self.setAnimation(direction: AnimationDirection.right) 
      self.dayLabel.textAlignment = .right 
     } 
    }