如何对 UIImages 数组进行排序?

Posted

技术标签:

【中文标题】如何对 UIImages 数组进行排序?【英文标题】:How to sort array of UIImages? 【发布时间】:2021-11-16 05:27:30 【问题描述】:

我有 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()
    

【问题讨论】:

欢迎来到社区。你能更具体地说明你想要什么吗?是否有您想要的特定布局?或者只是为图像视图设置动画 @VisalRajapakse 谢谢!我需要一个带有指定计时器参数的图片滑块。 3张图片在屏幕上一张张翻转。目前我一次显示 3 张图片 看看您是否可以将以下线程用于您的用例***.com/questions/39519102/ios-card-flip-animation/… 您的代码没有多大意义。您有一个名为 sortImages() 的函数,它不会对任何内容进行排序 - 它一次循环遍历所有图像,为每个图像创建一个图像视图,并尝试为每个图像视图设置动画,即使这些图像视图从未添加到视图层次结构。我看不出你是如何看到屏幕上显示的任何图像的。 @DuncanC 如何让代码正常工作? 【参考方案1】:

假设您想一次为一张图像设置动画,出现在您的视图控制器视图的中间,然后向上移动到视图的顶部,您可以像这样更改您的代码:

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()
    

【讨论】:

您不想要一个重复计时器还是在每个执行循环上设置一个新计时器? 糟糕。我以为 OP 的计时器正在重复。谢谢你抓住那个。是时候编辑我的答案了…… 顺便说一句,你的 SO 头像正在触发我的 Anatidaephobia。 这可能是由于改变。你的海雀怎么样? ;-) 我对海雀很好,但我只知道在某个地方,一只鸭子在看着我! :)

以上是关于如何对 UIImages 数组进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

如何创建 UIImages 数组

如何在 xCode 中保存 UIimages 数组(swift)

如何比较数组中的 UIImages?

如何在Swift中为UIImages创建一个闪烁的指针效果

如何将 UIImages 数组添加到集合视图

如何将数组复制到 UIImages 到另一个数组中?