如何在Swift中为UIImages创建一个闪烁的指针效果
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Swift中为UIImages创建一个闪烁的指针效果相关的知识,希望对你有一定的参考价值。
我正在尝试在Swift中创建指针效果。我有六个UIImageView,每个都有一个以循环方式排序的UIImage。我想创建一个动画,让每个图像闪烁一段时间(就好像它是一个指针指示)。
我想创建一个带有透明版图像的数组,然后从它们创建一个动画序列,但持续时间变得混乱。
这是我想要实现的想法。我想让图像一个接一个地具有这种闪烁效果。
答案
这就是我将视图放在一个圆圈中并使它们成为“闪光”的方法。
- 首先我创建了常规视图(我不想使用ImageView,但你可以随意更改代码)..
- 我计算了需要围绕具有一定半径的中心点放置视图的角度,以使它们放置在圆圈中。
- 接下来我创建一个动画功能,它具有正向和反向动画(我无法让
autoreverses
标志工作).. - 为了让一个显示在另一个之后,我只需添加一个延迟(x2因为正向+反向)。
- 为了弄清楚所有动画何时完成,我将整个函数包装在
CATransaction
中。
注意:如果您不需要圆形放置代码,只需将其删除即可。 AFAIK,你只需要动画代码。
//
// ViewController.swift
// TestSO
//
// Created by Brandon on 2018-03-03.
// Copyright © 2018 XIO. All rights reserved.
//
import UIKit
extension UIColor {
class func random() -> UIColor {
let rand = { (max: CGFloat) -> CGFloat in
let rnd = CGFloat(arc4random()) / CGFloat(UInt32.max)
return rnd * max
}
return UIColor(red: rand(1.0), green: rand(1.0), blue: rand(1.0), alpha: 1.0)
}
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let makeView = { () -> UIView in
let view = UIView()
view.backgroundColor = UIColor.random()
view.frame = CGRect(x: 0.0, y: 0.0, width: 50.0, height: 50.0)
self.view.addSubview(view)
return view
}
let imageViews = [
makeView(),
makeView(),
makeView(),
makeView(),
makeView(),
makeView()
]
let locationForView = { (angle: CGFloat, center: CGPoint, radius: CGFloat) -> CGPoint in
let angle = angle * CGFloat.pi / 180.0
return CGPoint(x: center.x - radius * cos(angle), y: center.y + radius * sin(angle))
}
for i in 0..<imageViews.count {
let center = self.view.center
let radius = ((150.0 + imageViews[i].bounds.size.width) / 2.0)
let count = imageViews.count
imageViews[i].center = locationForView(((360.0 / CGFloat(count)) * CGFloat(i)) + 90.0, center, radius)
}
self.animate(views: imageViews.reversed(), duration: 3.0, intervalDelay: 0.5)
}
private func animate(views: [UIView], duration: TimeInterval, intervalDelay: TimeInterval) {
CATransaction.begin()
CATransaction.setCompletionBlock {
print("COMPLETED ALL ANIMATIONS")
}
var delay: TimeInterval = 0.0
let interval = duration / TimeInterval(views.count)
for view in views {
let colour = view.backgroundColor
let transform = view.transform
UIView.animate(withDuration: interval, delay: delay, options: [.curveEaseIn], animations: {
view.backgroundColor = UIColor.red
view.transform = CGAffineTransform(scaleX: 1.2, y: 1.2)
}, completion: { (finished) in
UIView.animate(withDuration: interval, delay: 0.0, options: [.curveEaseIn], animations: {
view.backgroundColor = colour
view.transform = transform
}, completion: { (finished) in
})
})
delay += (interval * 2.0) + intervalDelay
}
CATransaction.commit()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
以上是关于如何在Swift中为UIImages创建一个闪烁的指针效果的主要内容,如果未能解决你的问题,请参考以下文章
我需要创建一个UIImages数组,我从Swift中的Camera roll加载
在 CALayer 中为 UIImages 分配自己的 Rect 的机制?