2016-10-29 18 views
12

Mam UIView, umieszczony na środku ekranu. Kiedy użytkownik naciśnie przycisk, chcę, aby przesunął się w górę w górnej części ekranu, gdy maleje do około jednej piątej jego wielkości.Animacja na skali i ruch UIView (swift)

Próbowałem to:

UIView.animateWithDuration(0.7) {() -> Void in 
      self.main.transform = CGAffineTransformMakeScale(0.2, 0.2) 
      self.main.transform = CGAffineTransformMakeTranslation(0, -250) 
     } 

Ale z jakiegoś powodu, że tylko skaluje widok. Próbowałem również wstawić to w animowanym obiekcie.Duration:

self.main.frame = CGRectMake(self.view.frame.width/2 - 10, 50, 50, 50) 

Jak mogę uruchomić obie animacje?

Odpowiedz

5

odpowiedź Joe powyżej robi dokładnie jak jego GIF opisuje ale tak naprawdę nie odpowiedzieć na to pytanie, ponieważ tłumaczy , a następnie skaluje widok (w przeciwieństwie do jednoczesnego tłumaczenia i skalowania). Problem polega na tym, że ustawiasz transformację widoku w bloku animacji, a następnie natychmiast zastępujesz tę wartość inną transformacją. Aby uzyskać jednocześnie tłumaczenie i skalowanie w tym samym czasie, będziesz potrzebować czegoś takiego:

@IBAction func animateButton(_ sender: UIButton) { 
    let originalTransform = self.main.transform 
    let scaledTransform = originalTransform.scaledBy(x: 0.2, y: 0.2) 
    let scaledAndTranslatedTransform = scaledTransform.translatedBy(x: 0.0, y: -250.0) 
    UIView.animate(withDuration: 0.7, animations: { 
     self.main.transform = scaledAndTranslatedTransform 
    }) 
} 
+0

dzięki za rozwiązanie, ale tłumaczenie przesunąć mój pogląd na względnie. Jak mogę przenieść go do naprawia współrzędną ekranową jak x = 100 y = 100 pozycji ???. Zdaję sobie sprawę, że przetłumaczony przesuń swoją pozycję w stosunku do aktualnej pozycji. –

+0

@ Md.Sulayman Musisz obliczyć różnicę między docelowymi współrzędnymi xi yi współrzędnymi swojego UIView, a następnie przetłumaczyć swoje UIView o tę kwotę. Jeśli chcesz zobaczyć przykład kodu, możesz otworzyć kolejne pytanie i połączyć mnie tutaj :) – WongWray

18

Możesz uzyskać podstawowe na kilka sposobów w Swift. Poniżej kod jest tylko proste podejście ...

class ViewController: UIViewController { 

@IBOutlet weak var animationButton: UIButton! 
@IBOutlet weak var myView: UIView! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // I added seperate colour to UIView when animation move from one animation block to another.So, You can get better understanding how the sequence of animation works. 
    self.myView.backgroundColor = .red 
} 

@IBAction func animateButton(_ sender: UIButton) { 

    UIView.animate(withDuration: 0.5, delay: 0.0, options: UIViewAnimationOptions.curveEaseIn, animations: { 
     //Frame Option 1: 
     self.myView.frame = CGRect(x: self.myView.frame.origin.x, y: 20, width: self.myView.frame.width, height: self.myView.frame.height) 

     //Frame Option 2: 
     //self.myView.center = CGPoint(x: self.view.frame.width/2, y: self.view.frame.height/4) 
     self.myView.backgroundColor = .blue 

     },completion: { finish in 

    UIView.animate(withDuration: 1, delay: 0.25,options: UIViewAnimationOptions.curveEaseOut,animations: { 
     self.myView.backgroundColor = .orange  
     self.myView.transform = CGAffineTransform(scaleX: 0.25, y: 0.25) 

     self.animationButton.isEnabled = false // If you want to restrict the button not to repeat animation..You can enable by setting into true 

     },completion: nil)}) 

     } 
    } 

wyjściowa:

enter image description here

+0

Witam. Zrobiłem to, ale mu uiimageview jest zmniejszany po zrobieniu tej animacji –

+0

@ Md.Sulayman thats cały pomysł postu zmniejszyć widok po animacji. Przeczytaj post ponownie. I daj mi znać, co próbujesz osiągnąć? – Joe

+0

ale mój współczynnik proporcji obrazu jest tracony po animacji, zmniejszanie nie jest problemem, chciałem, że też –