2017-07-05 2 views
1

Ziel:Glatte Erweiterung UIView Animation in Swift

Wie kann ich animieren ein UIView, die ich will den ganzen Bildschirm ausfüllen zu erweitern. Die UIView muss während der Animation gleichmäßig, gleichmäßig und ausgewogen erweitert werden.

Ich habe ein rotes Quadrat auf dem Bildschirm positioniert, beginnt klein und wird dann erweitert, um den Bildschirm anzupassen. (Bild 1.)

let subview = UIView() 
subview.backgroundColor = .red 
subview.frame = CGRect(x: 60, y: 200, width: 50, height: 50) 
self.view.addSubview(subview) 

Frage:

In Swift 2 und Swift 3, eine animateWithDuration verwenden, wie ich das rote Quadrat UIView Erweiterung in einem ausgewogenen beleben und sogar Weise in alle Richtungen, um den ganzen Bildschirm zu füllen?

UIView.animateWithDuration(1.0, delay: 0, options: nil, animations: { 

    ????? 

}, completion: nil) 

Bild 1:

enter image description here

Antwort

2

du versuchen können, habe ich die Dauer wurde auf 5 Sekunden, aber Sie auf die Idee kam.

let viewWidth = view.frame.width 
let viewHeight = view.frame.height 
UIView.animate(withDuration: 5) { 
    subview.frame = CGRect(x: 0, y: 0, width: viewWidth, height: viewHeight) 
} 
+0

Dies macht es ganz einfach. Vielen Dank. – user4806509

1

Es sieht aus wie Sie mit Skala spielen müssen.

class ViewController: UIViewController { 

var subview:UIView! 

@IBOutlet weak var animateButton:UIButton! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    subview = UIView() 
    subview.backgroundColor = .red 
    subview.frame = CGRect(x: 60, y: 200, width: 50, height: 50) 
    self.view.addSubview(subview) 

    self.view.bringSubview(toFront: animateButton) 
} 

@IBAction func animateButtonPressed(sender:UIButton) { 
    if(sender.tag == 0) { 

     let screenCenter = CGPoint(x:UIScreen.main.bounds.midX, y: UIScreen.main.bounds.midY) 
     let subviewCenter = self.view.convert(self.subview.center, to: self.view) 
     let offset = UIOffset(horizontal: screenCenter.x-subviewCenter.x, vertical: screenCenter.y-subviewCenter.y) 

     let widthScale = UIScreen.main.bounds.size.width/subview.frame.size.width 
     let heightScale = UIScreen.main.bounds.size.height/subview.frame.size.height 
     UIView.animate(withDuration: 1.0, animations: { 
      let scaleTransform = CGAffineTransform(scaleX: widthScale, y: heightScale) 
      let translateTransform = CGAffineTransform(translationX: offset.horizontal, y: offset.vertical) 
      self.subview.transform = scaleTransform.concatenating(translateTransform) 
     }, completion: { (finished) in 
      sender.tag = 1; 
     }) 

    } else { 
     UIView.animate(withDuration: 1.0, animations: { 
      self.subview.transform = CGAffineTransform.identity 
     }, completion: { (finished) in 
      sender.tag = 0; 
     }) 
    } 
} 
} 

enter image description here

+1

Vielen Dank für diesen Vorschlag. – user4806509