2017-12-27 27 views
1

私はXcodeで1つのビューアプリケーションを持ち、ViewController.swiftで次のことをしています。私の目的は、5秒以上かけて茶色の矩形で画面をいっぱいにすることです。私は何かを逃しているのですか、まったく間違ったアプローチですか?iOSで徐々に長方形のアニメーションを追加する

override func viewDidAppear(_ animated: Bool) { 
    super.viewDidAppear(animated) 
    let expandAnimation: CABasicAnimation = CABasicAnimation(keyPath: "path") 
    expandAnimation.fromValue = UIBezierPath(rect: CGRect(x: 0.0, y: 0.0, width: 0.0, height: 0.0)) 
    expandAnimation.toValue = UIBezierPath(rect: CGRect(x: 0.0, y: 0.0, width: self.view.bounds.size.width, height: self.view.bounds.size.height)) 
    expandAnimation.duration = 5.0 
    expandAnimation.fillMode = kCAFillModeForwards 
    expandAnimation.isRemovedOnCompletion = false 
    let rectLayer: CAShapeLayer = CAShapeLayer() 
    rectLayer.fillColor = UIColor.brown.cgColor 
    rectLayer.path = UIBezierPath(rect: CGRect(x: 0.0, y: 0.0, width: 0.0, height: 0.0)).cgPath 
    rectLayer.add(expandAnimation, forKey: nil) 
    self.view.layer.addSublayer(rectLayer) 
} 

私は徐々に色を表示したくありません。私はガラス充填の種類の効果が欲しい。派手な波状効果を除いて、この

Water Filling Fancy

を想像してみてください。

+0

あなたの視点を徐々に色を別の色に変えたいと思っていますか? –

+0

空から完全に茶色の色で塗りつぶし –

答えて

1

より良いあなたの質問を理解した後、あなたは(波のアニメーションなし)水ガラスの提出をシミュレートしたい、あなたはそれを通じ達成することができます:

let myLayer: CALayer = .init() 
    myLayer.backgroundColor = UIColor.red.cgColor 
    self.view.layer.addSublayer(myLayer) 

    func animateFilling(to view:UIView) 
    { 
     var mFrame = CGRect(x: 0, y: view.frame.size.height, width: view.frame.size.width, height: 0) 
     myLayer.frame = mFrame 
     let fillingAnim = CABasicAnimation(keyPath: "bounds") 
     fillingAnim.fillMode = kCAFillModeForwards 
     fillingAnim.fromValue = mFrame 
     fillingAnim.duration = 2 
     fillingAnim.isRemovedOnCompletion = false 
     mFrame.size.height = 1000 
     fillingAnim.toValue = mFrame 
     myLayer.add(fillingAnim, forKey: nil) 
    } 
+0

申し訳ありませんが私の説明で十分に冗長ではなかった場合。しかし、私は色が徐々に現れないようにしたい。私はガラス充填の反対の種類の効果が欲しい。 [this](http://i1.wp.com/www.quartzcodeapp.com/wp-content/uploads/2015/03/water-fill-animation.gif?resize=300%2C300)の反対側を想像してみてくださいファンシー波状効果。だから私は 'UIBezierPath'を使用していたのです –

+0

すばらしい反応をお寄せいただきありがとうございます! –

+0

クールで、このgifであなたの質問を更新すると、人々のために明確になります。 –

1

私はそれのようにそれを行うのは簡単だと思いますあなたがトップ波を望まない場合は

override func viewDidAppear(_ animated: Bool) { 
    super.viewDidAppear(animated) 

    let vv = UIView(frame: CGRect(x: 0, y: self.view.bounds.size.height, width: self.view.bounds.size.width, height: 0)) 

    vv.backgroundColor = UIColor.brown 

    self.view.addSubview(vv) 

    UIView.animate(withDuration: 5.0) { 


     vv.frame = CGRect(x: 0, y: self.view.bounds.size.height/3.0, width: self.view.bounds.size.width, height: self.view.bounds.size.height * 2/3.0) 

    } 

} 
+1

あまりにも仕事をしてくれてありがとう! –

関連する問題