私のアプリでは、カスタム画像配列ビューを使用しています。ユーザーが投稿ごとにアップロードする画像の数は、カルーセルのように表示される画像の数である必要があります。 firebaseでFirebaseの画像ビューの配列
、私はあなたがこの例では唯一の値はその中に文字列を持って見ることができるように
{
"image" : "W585B.jpg",
"imageFive" : "",
"imageFour" : "",
"imageThree" : "",
"imageTwo" : "",
}
をimageFive画像から値を持っています。ユーザーは1〜5枚の画像を投稿することができます。私はユーザーがアップロードした多数の画像を追加してカルーセルに表示したいと思います。ここに私が今持っているものがあります。
var imageArray = [UIImage]()
override func viewDidLoad() {
super.viewDidLoad()
if let stringImage = self.imageNames {
let imageRef = storage.reference(forURL: "gs://gsignme-14416.appspot.com/images/\(stringImage)")
imageRef.data(withMaxSize: 25 * 1024 * 1024, completion: { (data, error) -> Void in
if error == nil {
self.ImageOne = UIImage(data: data!)!
imageArray.append(self.ImageOne)
}else {
print("Error downloading image:")
}
self.carouselView.reloadData()
self.carouselView.type = .rotary
if let stringImages = self.imagesTwo {
let imageRefs = self.storage.reference(forURL: "gs://gsignme-14416.appspot.com/images/\(stringImages)")
imageRefs.data(withMaxSize: 25 * 1024 * 1024, completion: { (data, error) -> Void in
if error == nil {
self.ImageTwo = UIImage(data: data!)!
imageArray.append(self.ImageTwo)
}else {
print("Error downloading image:")
}
self.carouselView.reloadData()
self.carouselView.type = .rotary
})}
if let stringImage3 = self.imagesThree {
let imageRef = self.storage.reference(forURL: "gs://gsignme-14416.appspot.com/images/\(stringImage3)")
imageRef.data(withMaxSize: 25 * 1024 * 1024, completion: { (data, error) -> Void in
if error == nil {
self.ImageThree = UIImage(data: data!)!
imageArray.append(self.ImageThree)
}else {
print("Error downloading image:")
}
self.carouselView.reloadData()
self.carouselView.type = .rotary
})}
if let stringImage4 = self.imagesFour {
let imageRef = self.storage.reference(forURL: "gs://gsignme-14416.appspot.com/images/\(stringImage4)")
imageRef.data(withMaxSize: 25 * 1024 * 1024, completion: { (data, error) -> Void in
if error == nil {
self.ImageFour = UIImage(data: data!)!
imageArray.append(self.ImageFour)
}else {
print("Error downloading image:")
}
self.carouselView.reloadData()
self.carouselView.type = .rotary
})}
if let stringImage5 = self.imagesFive {
// AppDelegate.instance().showActivityIndicator()
let imageRef = self.storage.reference(forURL: "gs://gsignme-14416.appspot.com/images/\(stringImage5)")
imageRef.data(withMaxSize: 25 * 1024 * 1024, completion: { (data, error) -> Void in
if error == nil {
// AppDelegate.instance().dismissActivityIndicator()
self.ImageFive = UIImage(data: data!)!
imageArray.append(self.ImageFive)
}else {
print("Error downloading image:")
}
self.carouselView.reloadData()
self.carouselView.type = .rotary
})}
})
}
func carousel(_ carousel: iCarousel, viewForItemAt index: Int, reusing view: UIView?) -> UIView {
var imageView: UIImageView!
if view == nil {
imageView = UIImageView(frame: CGRect(x: 20, y: 0, width: 250, height: 270))
// imageView.backgroundColor = UIColor.lightGray
imageView.contentMode = .scaleAspectFit
imageView.clipsToBounds = true
carousel.clipsToBounds = true
}else{
imageView = view as! UIImageView
}
imageView.image = imageArray[index]
imageArray.removeAll()
return imageView
}
今、画像を表示するには、セルを2回クリックする必要があります。一度セルをクリックすると何も表示されませんが、2回目のクリックで画像が表示されます。同様に、別のセルをクリックすると、最初のクリックで前のセルのイメージが表示され、次に2番目のクリックでは、そのセルのイメージが表示されます。複数の画像を持つセルにIをクリックしたときに
また、最初にそれをクリックし、アプリケーションがクラッシュし、もう一度クリックする上で、何も示さず、致命的なエラー言う:私はありません範囲
私はimageArray.removeAll()行を除いてすべてを考え出しました。あるセルから別のセルに移動すると、イメージが追加されるため、そこに配置します。したがって、セル1の画像はセル2の画像に追加され、カルーセルに表示されますが、これは望ましくありませんが、imageArray.removeAll()は機能しません。 – juelizabeth
これまでのコードに自分のコードを更新しました。だから私は今、最初のクリックで画像を取得しています。私が今述べたような唯一の問題は、セルの画像が追加されていることです – juelizabeth