这很好用,但是动画只画1秒钟,看起来很不稳定.相反,我希望它是一个平滑的连续灌装仪表.
环顾四周似乎是继承CALayer并为meterLevel属性创建一个隐式动画可能就是这样.所以这就是我所拥有的:
import UIKitclass MeterControlVIEw: UIVIEw{var meterLevel: Int = 0 { dIDSet { self.layer.setValue(meterLevel,forKey: "meterLevel") }}var meterText: String = "00:00:00" { dIDSet { self.layer.setValue(meterText,forKey: "meterText") }}overrIDe class func layerClass() -> AnyClass { return MeterControlLayer.self}overrIDe func drawRect(rect: CGRect) { // Do nothing }}class MeterControlLayer: CALayer{@NSManagedvar meterLevel: Intvar meterText: String = "00:00:00"overrIDe class func needsdisplayForKey(key: String) -> Bool { if (key == "meterLevel") { return true } return super.needsdisplayForKey(key)}overrIDe func actionForKey(key: String) -> CAAction? { if (key == "meterLevel") { let anim: CABasicAnimation = CABasicAnimation.init(keyPath: key) anim.fromValue = self.presentationLayer()?.meterLevel anim.duration = 1.0 return anim } else { return super.actionForKey(key) }}overrIDe func drawInContext(ctx: CGContext) { super.drawInContext(ctx) UIGraphicsPushContext(ctx) XntervalStyleKit.drawMeterControl(frame: self.bounds,meterTime: meterText,meterLevelValue: CGfloat(meterLevel)) UIGraphicsPopContext() }}
遗憾的是,这并不像我期望的那样完美.动画仍然有点不稳定,虽然更接近我想要的.
我的问题更为笼统,这是完成我想做的事情的正确方法吗?我无法找到设置图层属性meterLevel和meterText的正确方法,而不使用setValueForKey:.这是正确的方法吗?
动画/图形对我来说绝对是新手.我是一个嵌入式C软件,试图将iOS开发作为一种业余爱好.
解决方法The animation is still a bit choppy,though closer to what I want.
鉴于此,似乎Core Animation实际上每帧都在绘制您的图层(或者尝试,无论如何).
不幸的是,一旦你对每一帧执行自定义图层绘制,你的性能就会变成主线程:通常,对于Core Animation本身可以动画化的属性(例如边界),动画本身会在渲染服务器中呈现,从您的应用程序进行进程外处理,并拥有自己的高优先级渲染线程.应用程序的主线程可以在这些动画类型中随意执行任何 *** 作,而不会中断动画.
但是,drawInContext(_ :)在应用程序的主线程上调用.如果你在那里放一个日志语句或断点,它是否会在动画持续时间内多次调用?如果是这样,那么图层就是正确的动画.你在这个函数中的绘图 *** 作可能是阻碍动画的.
尝试在图层上将drawAsynchronously设置为true.这将绘图命令推迟到后台线程,有时可以提高性能. (请注意,大多数(如果不是全部)UIGraphics和Core Graphics功能在iOS 4中都是线程安全的,因此背景绘图是安全的.)
此外,根据动画的复杂程度,您可能需要提前绘制几个中间表示(如果可能,在背景中并行绘制).如果它们不是太大,请将它们存储在内存中,这样您只需在图层中显示一些这些位图,而不是及时绘制它们.
总结以上是内存溢出为你收集整理的ios – Swift中自定义属性的隐式CALayer动画全部内容,希望文章能够帮你解决ios – Swift中自定义属性的隐式CALayer动画所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)