Ios 如何在Swift中创建UIImages的闪烁指针效果
我试图在Swift中创建指针效果。我有六个UIImageView,每个都有一个UIImages,它们以循环方式排列。我想创建一个动画,让每个图像在一定时间内闪烁(好像是指针指示) 我曾想过用透明版本的图像创建一个数组,然后从中创建一个动画序列,但持续时间混淆了 这就是我想要实现的想法。我想让这些图像有一个一个的闪光效果 这就是我如何将视图放置在一个圆圈中并使其“闪烁”的方法Ios 如何在Swift中创建UIImages的闪烁指针效果,ios,arrays,swift,uiimageview,uiimage,Ios,Arrays,Swift,Uiimageview,Uiimage,我试图在Swift中创建指针效果。我有六个UIImageView,每个都有一个UIImages,它们以循环方式排列。我想创建一个动画,让每个图像在一定时间内闪烁(好像是指针指示) 我曾想过用透明版本的图像创建一个数组,然后从中创建一个动画序列,但持续时间混淆了 这就是我想要实现的想法。我想让这些图像有一个一个的闪光效果 这就是我如何将视图放置在一个圆圈中并使其“闪烁”的方法 首先,我创建了常规视图(我不想使用ImageView,但您可以随意更改代码) 我计算了视图需要围绕具有一定半径的中心点
- 首先,我创建了常规视图(我不想使用ImageView,但您可以随意更改代码)
- 我计算了视图需要围绕具有一定半径的中心点放置的角度。。让他们围成一个圈
- 接下来,我创建了一个动画函数,该函数同时具有正向动画和反向动画(我无法使
标志正常工作)自动反转
- 为了一个接一个地显示,我只需添加一个延迟(x2,因为正向+反向)
- 为了确定所有动画何时完成,我将整个函数包装在一个
中CATransaction
//
// 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.
}
}
//
//ViewController.swift
//TestSO
//
//由Brandon于2018-03-03创建。
//版权所有©2018 XIO。版权所有。
//
导入UIKit
扩展UIColor{
类func random()->UIColor{
让rand={(max:CGFloat)->CGFloat进入
设rnd=CGFloat(arc4random())/CGFloat(UInt32.max)
返回rnd*最大值
}
返回UIColor(红色:兰德(1.0)、绿色:兰德(1.0)、蓝色:兰德(1.0)、阿尔法:1.0)
}
}
类ViewController:UIViewController{
重写func viewDidLoad(){
super.viewDidLoad()
让makeView={()->UIView进入
let view=UIView()
view.backgroundColor=UIColor.random()
view.frame=CGRect(x:0.0,y:0.0,宽度:50.0,高度:50.0)
self.view.addSubview(视图)
返回视图
}
让imageViews=[
makeView(),
makeView(),
makeView(),
makeView(),
makeView(),
makeView()
]
让locationForView={(角度:CGFloat,中心:CGPoint,半径:CGFloat)->CGPoint in
让角度=角度*CGFloat.pi/180.0
返回CGPoint(x:center.x-半径*cos(角度),y:center.y+半径*sin(角度))
}
对于0中的i..你有什么问题?你尝试过什么?@Brandon我尝试过为每个UIImage创建一个动画图像,但我无法使持续时间保持一致,因为它们最终会在时间上重叠,其中几个在应该一个接一个的情况下拥有指针图像。你知道CareReplicatorLayer吗?你是一个生命体aver!非常感谢。我一直在想如何让这个动画重复几次。换句话说,我希望这个动画在圆圈中重复。你能帮我吗?