2017-03-02 2 views
0

非常に基本的なアニメーションを作成しています。メインビューの全幅(30pt)の緑色の線で、画面の下部から画面の上部に移動します。プログラムで追加されたUIViewをアニメーション化すると、幅が半分に分割されます

このアニメーションをトリガーするボタンがあります。ボタンを押す前に、緑色の表示が全幅になります。すばらしいです!ボタンを押してアニメーションを作成すると、ビューの幅はアニメーションを開始するときに半分に分割されます。ここで

は、私が持っているものです。

クラスレベル

let animatedLineView = UIView() 
let lineAnimation = CABasicAnimation(keyPath: "position") 

のviewDidLoad

super.viewDidLoad() 
animatedLineView.frame = CGRect(x: 0, y: self.view.bounds.height - 30, width: self.view.bounds.width, height: 30) 
animatedLineView.backgroundColor = UIColor.green 
self.view.addSubview(animatedLineView) 

ボタン

@IBAction func testBtnPressed(_ sender: UIButton) { 
    lineAnimation.duration = 5 
    lineAnimation.fromValue = CGPoint(x: 0, y: self.view.bounds.height) 
    lineAnimation.toValue = CGPoint(x: 0, y: 0) 
    lineAnimation.autoreverses = true 
    lineAnimation.repeatCount = 100 
    animatedLineView.layer.add(lineAnimation, forKey: nil) 
} 

ボタンが

Before button is pressed

を押され前に、これは、ビューはどのように見えるこれは、ボタンが

押され後ビューはのように見えるものですAfter button is pressed

なぜ緑色の表示が半減するのですか?それを防ぐにはどうしたらいいですか?

+0

'animatedLineView.frame'の設定で' width:self.view.frame.width'を使ってみましたか? – ystack

答えて

2

を脇に移動し、半分隠され層のpositionが中心でありあなたのアニメーションが開始するとき、緑色のバーの中央を左端に移動しているので、それが半分にカットされているように見えます。バーの中央にx値を変更すると、その問題が表示されなくなります。あなたはまた、これが原点ではなく中心であることを考慮に入れて、y値を調整する必要があります。

+1

ビンゴ!それがトリックでした。ありがとうございました! – Joe

+0

@Joe好奇心が強い場合は、ドキュメントの 'position'プロパティに関する詳細をご覧ください:https://developer.apple.com/reference/quartzcore/calayer/1410791-position – creeperspeak

+0

ありがとう。緑のビューのアンカーポイントを調整することは、実際のアニメーション内の中心点を補正するよりもきれいでした。 – Joe

0

それが縮小していないことを私の推測(チェックする時間を持っていない、とあまりにもスクリーンショットを見ることができない)、それはデフォルトで

関連する問題