Core Graphics呼び出しを使用してコンテンツを描画するカスタムUIViewがあります。すべてうまくいきましたが、ディスプレイに影響を与える値の変化をアニメーション化したいと考えています。iOSでカスタムプロパティをアニメーション化する方法
var _anime: CGFloat = 0
var anime: CGFloat {
set {
_anime = newValue
for(gauge) in gauges {
gauge.animate(newValue)
}
setNeedsDisplay()
}
get {
return _anime
}
}
そして私はViewControllerをからアニメーションを開始している:私は私のカスタムUViewでこれを達成するためのカスタムプロパティを持っている
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
self.emaxView.anime = 0.5
UIView.animate(withDuration: 4) {
DDLogDebug("in animations")
self.emaxView.anime = 1.0
}
}
これは動作しません - アニメーション値は0.5からの変更を行います1.0に変更しましたが、即座に変更されます。アニメセッターへの呼び出しは2回あり、1回は値0.5で、その後は1.0で直ちに呼び出されます。プロパティを変更すると、標準のUIViewプロパティにアニメートしています。アルファ、それは正しく動作します。
私はAndroidの背景から来ているので、このiOSのアニメーションフレームワーク全体は疑いの余地なく黒い魔法のように見えます。定義済みのUIViewプロパティ以外のプロパティをアニメーション化する方法はありますか?
アニメーション表示は次のようになっています:1/2秒ごとに新しい値が得られ、その間にポインタが前の値から次の値にスムーズに移動します。それを更新するためのコードは次のとおりです。
open func animate(_ progress: CGFloat) {
//DDLogDebug("in animate: progress \(progress)")
if(dataValid) {
currentValue = targetValue * progress + initialValue * (1 - progress)
}
}
そしてそれが更新されます後draw()
を呼び出すには、あなたが呼び出す必要があります
initialValue
間と
targetValue
何がこのプロパティの変更を達成しようとしていますか?プロパティがdraw(in:rect)で実行される描画の一部の外観を変更した場合、そのようにアニメートすることはできません。 –
@twiz_そうだね。どのようにそれを行うにはどのような提案? – Clyde
'CAAnimation'を使って、カスタムドローイングの図面を修正してみましょう!私は 'UIView.animate'ウェイがカスタムドロー矩形描画で動作するかどうか分かりません! – Rikh