Ios 正确的方法做一个类似Twitter的面具加载动画?
我一直在尝试制作一个类似于Twitter加载覆盖的加载屏幕: 我不确定我的做法是否是“正确”的做事方式。我关注的问题很多:Ios 正确的方法做一个类似Twitter的面具加载动画?,ios,swift,Ios,Swift,我一直在尝试制作一个类似于Twitter加载覆盖的加载屏幕: 我不确定我的做法是否是“正确”的做事方式。我关注的问题很多: 有没有更好的方法来选择各种屏幕尺寸的遮罩图像?遮罩需要延伸到屏幕边缘才能与背景色配合使用,因此我将其设置为手机可能边界的大小 动画处理是否正确?这是我第一次对任何东西使用CATransaction 我应该像现在这样将视图添加到选项卡栏控制器的视图中吗 有没有什么方法可以将其抽象出来,或者有更好的方法将其放入应用程序的生命周期中?到现在为止,我需要复制此代码,并将其放置在
- 有没有更好的方法来选择各种屏幕尺寸的遮罩图像?遮罩需要延伸到屏幕边缘才能与背景色配合使用,因此我将其设置为手机可能边界的大小
- 动画处理是否正确?这是我第一次对任何东西使用
CATransaction
- 我应该像现在这样将视图添加到选项卡栏控制器的视图中吗
- 有没有什么方法可以将其抽象出来,或者有更好的方法将其放入应用程序的生命周期中?到现在为止,我需要复制此代码,并将其放置在任何可以作为起点的控制器上(到现在为止有两个控制器)
override func viewDidLoad() {
super.viewDidLoad()
prepareLoadingOverlay()
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
animateMask()
}
var mask: CALayer?
var blueView: UIImageView?
func prepareLoadingOverlay() {
let size = UIScreen.mainScreen().bounds.size
var cutoutImage: UIImage?
switch size.height {
case 420:
cutoutImage = CutoutMap.Image480 // UIImage
case 568:
cutoutImage = CutoutMap.Image568
case 667:
cutoutImage = CutoutMap.Image667
case 736:
cutoutImage = CutoutMap.Image736
default:
cutoutImage = CutoutMap.Image667
}
if let tabBarViewController = self.tabBarController,
let cutout = cutoutImage {
let containerFrame = tabBarViewController.view.frame
blueView = UIImageView.init(frame: containerFrame)
blueView!.image = UIImage.imageFromColor(Color.Blue)
self.mask = CALayer()
self.mask?.contents = cutout.CGImage
self.mask?.bounds = CGRect(x: 0, y: 0, width: size.width, height: size.height)
self.mask?.anchorPoint = CGPoint(x: 0.5, y: 0.5)
self.mask?.position = CGPoint(x: containerFrame.size.width/2, y: containerFrame.size.height/2)
tabBarViewController.view.addSubview(blueView!)
blueView!.layer.mask = self.mask
}
}
func animateMask() {
let size = UIScreen.mainScreen().bounds.size
if let mask = self.mask {
CATransaction.begin()
CATransaction.setAnimationDuration(1)
CATransaction.setCompletionBlock { () -> Void in
CATransaction.begin()
CATransaction.setAnimationDuration(1)
CATransaction.setCompletionBlock { () -> Void in
self.blueView?.removeFromSuperview()
}
mask.bounds = CGRect(x: 0, y: 0, width: size.width*15, height: size.height*15)
CATransaction.commit()
}
mask.bounds = CGRect(x: 0, y: 0, width: size.width, height: size.height)
CATransaction.commit()
}
}
在此方面的任何帮助都将不胜感激 不要对各种分辨率使用硬编码图像大小,只需将单个图像的大小设置为与窗口大小成比例。您是否没有得到预期的结果?在看代码之前,我首先想到的是使用比例变换。看起来您正在为边界设置动画。不要对各种分辨率使用硬编码图像大小,只需将单个图像的大小设置为与窗口大小成比例。您是否没有得到预期的结果?在看代码之前,我首先想到的是使用比例变换。看起来您正在设置边界的动画。