如何通过按 UIButton 从数组中切换 UIViewController 中的 UIImages

Posted

技术标签:

【中文标题】如何通过按 UIButton 从数组中切换 UIViewController 中的 UIImages【英文标题】:How to switch UIImages in UIViewController from Array by pressing UIButton 【发布时间】:2020-02-19 16:48:33 【问题描述】:

所以我有一个带有 UIImageView 和两个按钮的故事板,我需要这些按钮来更改 UIImageView 中的图像。 UIImages 存储在一个数组中。我试过了,但它只能显示第一张图片。帮助将不胜感激:)

类视图控制器:UIViewController

var images: [UIImage] = [
UIImage.init(named: "2")!,
UIImage.init(named: "3")!,
UIImage.init(named: "4")!]

override func viewDidLoad() 
    super.viewDidLoad() 


// Do any additional setup after loading the view.


@IBOutlet weak var imageView: UIImageView!

@IBAction func nextButton(_ sender: Any)
    for el in images 
        imageView.image = el 

【问题讨论】:

使用UIImage(name: "")而不是UIImage.init(named: "")会更短 【参考方案1】:

由于@IBAction 中的 for 循环,您只能看到设置为图像视图的最后一张图像。对于解决方案,您可以定义一个变量,通过按钮操作增加该值并将其设置为您的数组索引以显示在您的图像视图中。

【讨论】:

【参考方案2】:

您想使用“索引”值来确定要从图像数组中显示的图像。

从 0(零)开始显示第一张图像(数组从零开始)。

当您单击“下一步”按钮时,增加索引并更新 imageView(但不要超出数组中的图像数量)。

当您点击“上一个”按钮时,递减索引并更新 imageView(但不要低于 0)。

class ViewController: UIViewController 

    var images: [UIImage] = [
        UIImage.init(named: "2")!,
        UIImage.init(named: "3")!,
        UIImage.init(named: "4")!
    ]

    @IBOutlet weak var imageView: UIImageView!

    var imageIndex: Int = 0

    override func viewDidLoad() 
        super.viewDidLoad()
        // updae the imageView with the first image
        imageView.image = images[imageIndex]
    

    @IBAction func nextButton(_ sender: Any) 
        // if we're at the end of the images array, just return
        if imageIndex == images.count - 1 
            return
        
        // increment the index
        imageIndex += 1
        // update the image view
        imageView.image = images[imageIndex]
    

    @IBAction func prevButton(_ sender: Any) 
        // if we're at the start of the images array, just return
        if imageIndex == 0 
            return
        
        // decrement the index
        imageIndex -= 1
        // update the image view
        imageView.image = images[imageIndex]
    


【讨论】:

【参考方案3】:
var images = [UIImage(named: "2"), UIImage(named: "3"), UIImage(named: "4")]
var actualImage = 0 // counter to know witch image is displayed

override func viewDidLoad() 
    super.viewDidLoad()
    // Do any additional setup after loading the view.


@IBOutlet weak var imageView: UIImageView!

@IBAction func nextButton(_ sender: Any) 
    imageView.image = images[actualImage]

    if actualImage == images.count - 1  // check if i'm at the last picture
        actualImage = 0 // reset the counter to the first position
     else 
        actualImage += 1
    

【讨论】:

以上是关于如何通过按 UIButton 从数组中切换 UIViewController 中的 UIImages的主要内容,如果未能解决你的问题,请参考以下文章

如何在滑动手势识别器函数中找到 UIButton 元素的父元素以构造对象?

延迟切换uiviews

如何在按住手指的同时从使用一个 UIButton 切换到另一个?

由于 UIButton segue,如何切换 UITabBars?

IOS。如何在 UIButton 上绘制复杂的图像?

按标签引用 UIButton