import UIKit @UIApplicationMain class AppDelegate: UIResponder,UIApplicationDelegate { var window: UIWindow? func application(application: UIApplication,dIDFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { self.window = UIWindow(frame: UIScreen.mainScreen().bounds) self.window!.rootVIEwController = ExampleController() self.window!.makeKeyAndVisible() return true } } class ExampleController: UIVIEwController { overrIDe func vIEwDIDLoad() { super.vIEwDIDLoad() let redVIEw = UIVIEw(frame: CGRect(x: 200,y: 200,wIDth: 800,height: 500)) redVIEw.backgroundcolor = UIcolor.redcolor().colorWithAlphaComponent(0.5) self.vIEw.addSubvIEw(redVIEw) let effect = UIInterpolatingMotionEffect(keyPath: "center.x",type: .TiltAlongHorizontalAxis) effect.minimumrelativeValue = -100 effect.maximumrelativeValue = 100 let effectGroup = UIMotionEffectGroup() effectGroup.motionEffects = [effect] redVIEw.motionEffects = [effectGroup] }}
在Simulator和新Apple TV上导致以下行为
有没有办法避免振荡?
解决方法 我在模拟器中尝试了你的代码,打印水平偏移:public class MyMotionEffect : UIInterpolatingMotionEffect { public overrIDe func keypathsAndrelativeValuesForVIEwerOffset(vIEwerOffset: UIOffset) -> [String : AnyObject]? { print("\(vIEwerOffset.horizontal)") return super.keypathsAndrelativeValuesForVIEwerOffset(vIEwerOffset); }}
过了一会儿,我可以重现振荡.生成的(水平)偏移量具有以下图表:
您可以看到倾斜中已经存在振荡.设备似乎一次产生两个倾斜.
一种解决方案是添加启发式方法(将偏移值与前两个进行比较并忽略是否存在符号更改,或忽略具有突然更改的偏移.不幸的是,这两种解决方案都不完美).最好的解决方案可能是直接使用Core Motion并完全避免本机转换.或者使用较小的距离,因为振动将不可见.
总结以上是内存溢出为你收集整理的swift – tvOS中意外的运动效应振荡全部内容,希望文章能够帮你解决swift – tvOS中意外的运动效应振荡所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)