2017-06-22 13 views
0

私のアプリでは、カスタム画像配列ビューを使用しています。ユーザーが投稿ごとにアップロードする画像の数は、カルーセルのように表示される画像の数である必要があります。 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をクリックしたときに

また、最初にそれをクリックし、アプリケーションがクラッシュし、もう一度クリックする上で、何も示さず、致命的なエラー言う:私はありません範囲

答えて

0

外のインデックスを確かにあなたもこれを試すことができます:

func carousel(_ carousel: iCarousel, viewForItemAt index: Int, reusing view: UIView?) -> UIView { 
    var imageView = view as! 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 

     imageView = view as! UIImageView 
     imageView.image = imageArray[index] 
     imageArray.removeAll() // are you sure about this line? 
} 
     return imageView 
    } 
+0

私はimageArray.removeAll()行を除いてすべてを考え出しました。あるセルから別のセルに移動すると、イメージが追加されるため、そこに配置します。したがって、セル1の画像はセル2の画像に追加され、カルーセルに表示されますが、これは望ましくありませんが、imageArray.removeAll()は機能しません。 – juelizabeth

+0

これまでのコードに自分のコードを更新しました。だから私は今、最初のクリックで画像を取得しています。私が今述べたような唯一の問題は、セルの画像が追加されていることです – juelizabeth

関連する問題