2017-03-06 74 views
0

我想在Swift中使用CoreMotion(加速度计)在2 UIImages之间切换。倾斜iPhone更改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; 

     } 
    } 

回答

0

确保您的设备纵向锁定设置为关闭控制中心,尝试下面的代码。

@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") 

    } 
}