倾斜iPhone以更改UIImage(加速计)
我正在尝试使用Swift中的倾斜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
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”)
}
违约:
打印(“未知”)
}
}