在读MBProgressHUD时,发现有个叫做UIInterpolatingMotionEffect
的效果,一直在用这个框架,还真没注意过有这种动画.
当你手机在摇晃的时候,那个遮罩是会上下左右摆动的.
效果实现起来也很简单.
创建了一个CLMotionView,代码如下:
import UIKit
class CLMotionView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
//这个值如果设置的过大的话,View移动起来卡顿会比较严重.
let effectOffset = 20.0
let effectX = UIInterpolatingMotionEffect(keyPath: "center.x", type: .tiltAlongHorizontalAxis)
let effectY = UIInterpolatingMotionEffect(keyPath: "center.y", type: .tiltAlongVerticalAxis)
effectX.maximumRelativeValue = effectOffset
effectX.minimumRelativeValue = -effectOffset
effectY.maximumRelativeValue = effectOffset
effectY.minimumRelativeValue = -effectOffset
let group = UIMotionEffectGroup()
group.motionEffects = [effectX, effectY]
self.addMotionEffect(group)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
ViewController.swift代码如下:
import UIKit
class ViewController: UIViewController {
private let mv: CLMotionView = CLMotionView()
let sw = UIScreen.main.bounds.size.width
let sh = UIScreen.main.bounds.size.height
override func viewDidLoad() {
super.viewDidLoad()
let w = sw-20;
let x = (sw-w)/2
let y = (sh-w)/2
mv.frame = CGRect(x: x, y: y, width: w, height: w)
mv.backgroundColor = UIColor.red
view.addSubview(mv)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
这个需要真机运行,运行起来,左右前后摇晃就可以看到红色的View跟着在动.