2016-12-15 3 views
1

こんにちは私は奇妙な問題に直面しています。私は私の場合にうまく動作しているアニメーションのボタンをクリックするとビューの幅を広げたいと思う。私は幅を大きくするために使用していたコードはアニメーションを含むビューの幅を小さくする

@IBAction func increaseWidth(_ sender: AnyObject) { 

     UIView.animate(withDuration: 1.0, delay: 0, options: 
     [.allowUserInteraction], animations: { 

      print("Animation function animateStuff() started!") 

      let frmPlay : CGRect = self.nameLbl.frame 
      let originXbutton = frmPlay.origin.x 
      let originYbutton = frmPlay.origin.y 
      let originWidthbutton = frmPlay.size.width 
      let originHeightbutton = frmPlay.size.height 

      self.nameLbl.frame = CGRect(origin: CGPoint(x: originXbutton,y :originYbutton), size: CGSize(width: originWidthbutton+100, height: originHeightbutton)) 


     }, completion: { finished in 

    }) 
} 

below-である。しかし、私はちょうど減少することによって使用されwidth.Theコードを減少さanimation.Itと幅が減少していないことで使用があるコード幅が-

@IBAction func decreaseWidth(_ sender: AnyObject) { 


    UIView.animate(withDuration: 1.0, delay: 0, options: 
     [.allowUserInteraction], animations: { 

      print("Animation function animateStuff() started!") 

      let frmPlay : CGRect = self.nameLbl.frame 
      let originXbutton = frmPlay.origin.x 
      let originYbutton = frmPlay.origin.y 
      let originWidthbutton = frmPlay.size.width 
      let originHeightbutton = frmPlay.size.height 

      // self.nameLbl.frame = frmPlay 
      self.nameLbl.frame = CGRect(origin: CGPoint(x: originXbutton,y :originYbutton), size: CGSize(width: originWidthbutton-100, height: originHeightbutton)) 



     }, completion: { finished in 

    }) 

} 

ここで間違っているところを助けてください。

+0

チェックが....私はあなたが何を – Joe

+0

興味深い質問をupdate.let私の、UILabelはあなたがアニメーションのサイズを変更することができない特別な要素であると思われますそれ(http://stackoverflow.com/a/22224630/3869284)。それをUIViewに配置し、そのビューでアニメートしてみてください。 – Ryan

+0

@Jeo - 更新されたコードも以前のものと同じ応答をします。 ): –

答えて

3

このアニメーションを実現するには、単にCALayerを使用します。下記の方法を試してください。

func scaleX() { 

    let animation = CABasicAnimation(keyPath: "transform.scale.x") 
    animation.fromValue = NSValue(cgSize: CGSize(width: 1, height: 1)) 
    animation.toValue = NSValue(cgSize: CGSize(width: 1.2, height: 1)) 
    animation.duration = 1.0 
    self.imageView.layer.add(animation, forKey: "Image-scale") 
    imageView.transform = CGAffineTransform(scaleX: 1.2, y: 1.0) 

} 

func reset() { 

    UIView.animate(withDuration: 1) { 
      self.imageView.transform = CGAffineTransform.identity 
    } 

} 

注:私はanimation.Youアニメーションを実行するために、あなたのviewを割り当てることができますテストするimageViewを使用しています。

更新:

を私はあなたが法の下にそのフレームのコンテンツsize.Tryを変更することにより、基本的なUIViewのアニメーションを使用することをお勧めします。

override func viewDidAppear(_ animated: Bool) { 
    //To restrict animation repeats. 
    resetButton.isEnabled = false 
    resetButton.showsTouchWhenHighlighted = true 
    scaleButton.showsTouchWhenHighlighted = true 
} 


func scaleX() { 

    resetButton.isEnabled = true 
    scaleButton.isEnabled = false 
    UIView.animate(withDuration: 1) { 
     self.imageView.frame = CGRect(x: self.imageView.frame.origin.x, y: self.imageView.frame.origin.y, width: self.imageView.frame.width + 100, height: self.imageView.frame.height) 
    } 
} 

func reset() { 

    resetButton.isEnabled = false 
    scaleButton.isEnabled = true 
    UIView.animate(withDuration: 1) {  
    self.imageView.frame = CGRect(x: self.imageView.frame.origin.x, y: self.imageView.frame.origin.y, width: self.imageView.frame.width - 100, height: self.imageView.frame.height)  
} 

} 

出力:

enter image description here

+0

レスポンスありがとうございますが、ビューのx座標を変更せずにビューの幅を増やしたいだけでなく、x座標を変更せずにビューの幅を減らすこともできます。上記の方法でこれをどのように達成できるか教えてください。 –

関連する問題