倾斜iPhone以更改UIImage(加速计)

倾斜iPhone以更改UIImage(加速计),iphone,swift,uiimage,accelerometer,core-motion,Iphone,Swift,Uiimage,Accelerometer,Core Motion,我正在尝试使用Swift中的CoreMotion(加速计)在2个UIImage之间切换 我已经在两幅图像之间实现了平滑的淡入淡出过渡效果,目前我正在使用一个按钮来实例化这个效果。想用加速计来代替它,这样你就可以控制效果的处理方式了 @IBAction func TapToFade(_ sender: AnyObject) { let image1:UIImage = UIImage(named: "ImageA")!; let image2:UIImage

我正在尝试使用Swift中的
CoreMotion
(加速计)在2个UIImage之间切换

我已经在两幅图像之间实现了平滑的淡入淡出过渡效果,目前我正在使用一个按钮来实例化这个效果。想用加速计来代替它,这样你就可以控制效果的处理方式了

    @IBAction func TapToFade(_ sender: AnyObject) {
        let image1:UIImage = UIImage(named: "ImageA")!;
        let image2:UIImage = UIImage(named: "ImageB")!;
        let crossFade:CABasicAnimation = CABasicAnimation(keyPath: "contents");
        crossFade.duration = 3.0;
        crossFade.beginTime = 0.0;
        crossFade.fromValue = image1.cgImage;
        crossFade.toValue = image2.cgImage;
        imageView.layer.add(crossFade, forKey:"animateContents");

        if crossFade.beginTime < 5.0 {
            imageView.image = image2;

        }
    }
@iAction func TapToFade(u发送方:AnyObject){
让image1:UIImage=UIImage(名为:“ImageA”)!;
让image2:UIImage=UIImage(名为:“ImageB”)!;
让交叉淡入淡出:CABasicAnimation=CABasicAnimation(关键路径:“内容”);
crossFade.duration=3.0;
crossFade.beginTime=0.0;
crossFade.fromValue=image1.cgImage;
crossFade.toValue=image2.cgImage;
imageView.layer.add(crossFade,forKey:“animateContents”);
如果crossFade.beginTime<5.0{
imageView.image=image2;
}
}

确保您的设备在控制中心中设置为关闭,然后尝试下面的代码

 @IBOutlet weak var imageView: UIImageView!

 override func viewDidLoad() {
    super.viewDidLoad()

 UIDevice.current.beginGeneratingDeviceOrientationNotifications() 
 NotificationCenter.default.addObserver(self, selector: #selector(ViewController.detectMotion),name: NSNotification.Name.UIDeviceOrientationDidChange, object: nil)
 }


 func detectMotion(){
    let device = UIDevice.current
    switch device.orientation{
    case .portrait:

        let crossFade:CABasicAnimation = CABasicAnimation(keyPath: "contents");
        crossFade.duration = 3.0;
        crossFade.beginTime = 0.0;
        crossFade.fromValue = UIImage(named: "ImageB.jpg")?.cgImage
        crossFade.toValue = UIImage(named: "ImageA.jpg")?.cgImage
        imageView.layer.add(crossFade, forKey:"animateContents");

        if crossFade.beginTime < 5.0 {
            imageView.image = UIImage(named: "ImageA.jpg")
        }

    case .faceUp:

        let crossFade:CABasicAnimation = CABasicAnimation(keyPath: "contents");
        crossFade.duration = 3.0;
        crossFade.beginTime = 0.0;
        crossFade.fromValue = UIImage(named: "ImageA.jpg")?.cgImage
        crossFade.toValue = UIImage(named: "ImageB.jpg")?.cgImage
        imageView.layer.add(crossFade, forKey:"animateContents");

        if crossFade.beginTime < 5.0 {
            imageView.image = UIImage(named: "ImageB.jpg")
        }

    default:
        print("unknown")

    }
}
@ibvar-imageView:UIImageView!
重写func viewDidLoad(){
super.viewDidLoad()
UIDevice.current.BegingeratingDeviceOrientationNotifications()
NotificationCenter.default.addObserver(self,选择器:#选择器(ViewController.detectMotion),名称:NSNotification.name.UIDeviceOrientationIDChange,对象:nil)
}
func detectMotion(){
让设备=UIDevice.current
开关装置.定向{
案例.肖像:
让交叉淡入淡出:CABasicAnimation=CABasicAnimation(关键路径:“内容”);
crossFade.duration=3.0;
crossFade.beginTime=0.0;
crossFade.fromValue=UIImage(名为:“ImageB.jpg”)?.cgImage
crossFade.toValue=UIImage(名为:“ImageA.jpg”)?.cgImage
imageView.layer.add(crossFade,forKey:“animateContents”);
如果crossFade.beginTime<5.0{
imageView.image=UIImage(名为:“ImageA.jpg”)
}
案例:faceUp:
让交叉淡入淡出:CABasicAnimation=CABasicAnimation(关键路径:“内容”);
crossFade.duration=3.0;
crossFade.beginTime=0.0;
crossFade.fromValue=UIImage(名为:“ImageA.jpg”)?.cgImage
crossFade.toValue=UIImage(名为:“ImageB.jpg”)?.cgImage
imageView.layer.add(crossFade,forKey:“animateContents”);
如果crossFade.beginTime<5.0{
imageView.image=UIImage(名为:“ImageB.jpg”)
}
违约:
打印(“未知”)
}
}