簡體   English   中英

檢查UIImageView中的圖像不是占位符圖像並追加到UIImage數組

[英]check image in UIImageView is not a placeholder image and append to UIImage array

我為圖像視圖設置了一個占位符圖像。 用戶可以將這些照片從他們的圖庫中更改為照片。 完成此操作后,他們便可以將這些圖像上傳到數據庫。 用戶可以上傳單個圖像,也可以上傳多個圖像,以[UIImage]的形式上傳。 但是,我不想上傳占位符圖像。

我已經設法做到這一點,但是非常不優雅。 首先,我將UIImageView子類化,添加了一個名為isSet的屬性,並將所有圖像視圖設置為此類,以完成此操作:

class ItemImageViewClass: UIImageView {

//keeps track of whether the image has changed from the placeholder image.
var isSet = Bool()

}

然后在用戶選擇圖像后設置圖像時,isSet屬性設置為true。

要檢查圖像視圖中的圖像是否已從占位符圖像更改(即isSet == true ),我使用了以下代碼:

var imageArray: [UIImage]? = nil

    if imageViewOne.isSet {
    guard let mainImage = imageViewOne.image else {return}
        if (imageArray?.append(mainImage)) == nil {
            imageArray = [mainImage]
        }
    }
    if imageViewTwo.isSet {
        guard let imageTwo = imageViewTwo.image else {return}
        if (imageArray?.append(imageTwo)) == nil {
            imageArray = [imageTwo]
        }
    }

    guard imageArray != nil else {
        print("imageArray is nil")
        alertMessage("Hey!", message: "Please add some images!")
        return
    }

選擇至少一張圖像后,該陣列將保存到數據庫中。

這似乎是一種非常混亂的方式。 子類化UIImageView,並且必須使用一系列if語句檢查每個圖像是否已更改。 有沒有更優雅的方法來實現這一目標? 謝謝

我建議您使用后台UIImageView(placeholder)和可選的前景UIImageView(用戶選擇)創建滿足您需要的新UI組件。 然后只需檢查是否存在可選的前景UIImageView,因為您可以依靠此UIImageView包含用戶選擇的圖像。

有一個解決方案,可以擴展UIImageView以避免子類化。 並且,使用filterflatMap傳遞if語句。 這要求您為每個UIImageView使用相同的對占位符圖像的引用。

// In this example, the placeholder image is global but it doesn't have to be.
let placeHolderImage = UIImage() 

extension UIImageView {

  // Check to see if the image is the same as our placeholder 
  func isPlaceholderImage(_ placeHolderImage: UIImage = placeHolderImage) -> Bool {
    return image == placeHolderImage
  }
}

用法:

let imageViewOne = UIImageView(image: placeHolderImage)
imageViewOne.isPlaceholderImage() // true

let imageViewTwo = UIImageView()
imageViewTwo.isPlaceholderImage() // false

let imageViewThree = UIImageView()
imageViewThree.image = UIImage(named: "my-image")
imageViewThree.isPlaceholderImage() // false

篩選並映射非占位符或nil的圖像:

let imageArray = [imageViewOne, imageViewTwo, imageViewThree].filter 
{ !$0.isPlaceholderImage() }.flatMap { $0.image }

print(imageArray) // imageViewThree.image

如果擴展名不能滿足您的要求,那么我肯定會考慮使用“ filter and flatMap”來避免該if語句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM