arrays - 如何对 UIImages 数组进行排序?
问题描述
我有 3 张图片,我需要用动画来实现它们。我如何使用循环在屏幕上分别显示每个图像?请帮帮我
class ViewController: UIViewController {
var imageArray: [UIImage] = [UIImage(named: "1")!, UIImage(named: "2")!, UIImage(named: "3")!]
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(true)
Timer.scheduledTimer(timeInterval: 2, target: self, selector: #selector(handleTimer), userInfo: nil, repeats: false)
}
private func setImageSettings(to image: UIImage?) -> UIImageView {
let pictureParams = UIImageView(image: image)
pictureParams.frame.size = CGSize(width: 400, height: 300)
pictureParams.center = view.center
pictureParams.contentMode = .scaleAspectFit
view.addSubview(pictureParams)
return pictureParams
}
func moveImages(_ targetView: UIImageView) {
UIImageView.animate(withDuration: 2, delay: 0, options: [], animations: {targetView.frame.origin = CGPoint(x: targetView.frame.origin.x + 320, y: targetView.frame.origin.y )}, completion: nil)
}
func sortImages() {
for image in imageArray{
moveImages(setImageSettings(to: image))
}
}
@objc private func handleTimer(_ sender: Timer) {
sortImages()
}
}
解决方案
假设您想一次为一张图像设置动画,出现在视图控制器视图的中间,然后向上移动到视图顶部,您可以像这样更改代码:
class ViewController: UIViewController {
var imageIndex = 0
var imageArray: [UIImage] = [UIImage(named: "1")!, UIImage(named: "2")!, UIImage(named: "3")!]
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(true)
let timer: Timer? = Timer.scheduledTimer(timeInterval: 2, target: self, selector: #selector(handleTimer), userInfo: nil, repeats: true)
}
private func setImageSettings(to image: UIImage?) -> UIImageView {
let pictureParams = UIImageView(image: image)
pictureParams.frame.size = CGSize(width: 400, height: 300)
pictureParams.center = view.center
pictureParams.contentMode = .scaleAspectFit
view.addSubview(pictureParams)
return pictureParams
}
func moveImages(_ targetView: UIImageView) {
UIImageView.animate(withDuration: 2, delay: 0, options: [], animations: {targetView.frame.origin = CGPoint(x: targetView.frame.origin.x + 320, y: targetView.frame.origin.y )}, completion: nil)
}
func animateImages() {
// Fetch an image from the array
let image = imageArray[imageIndex]
// Create the animation for that image
moveImages(setImageSettings(to: image))
// Move on to the next image index
imageIndex += 1
// If we are past the end of the array, stop.
if imageIndex == imagesArray.count {
timer.invalidate()
}
}
@objc private func handleTimer(_ sender: Timer) {
animateImages()
}
}
推荐阅读
- java - MapStruct 没有生成实现类
- graphql - 通过 GraphQL API 的 Nebular (ngx-admin) 身份验证流程
- database - 具有过多 NULL 值的列如何损害数据库性能?
- airflow - 气流 1.10.0 | ImportError:没有名为 pip._vendor 的模块
- python - 蟒蛇 | 熊猫以多个间隔丢弃值
- docker - 警报管理器无法启动,但 Prometheus 可以正常启动
- javascript - 我的代码有问题吗?(简单的 JavaScript 查找特殊字符)
- javascript - 如何在流星中简单模式的数组类型字段中加载文档
- python - 如何在 while 循环下获得选择函数以返回不同的结果
- symbolic-math - SAGE:在 SR 基环中分解特征多项式