0

2つのUiviewコントローラーの間でUIImageを送信することは適切ですか?UIImageを2つのコントローラ間で送信するのは正しいですか?

私はCS193P Spring - Smashtagの課題4に取り組んでいます。

ここで、私は表の表記を追加する必要があります(これは、コメント、ハッシュタグ、画像、URLのツイートの追加データです)。そこの適切な場所に画像を配置する必要があります。その目的のために私はすでにそれをダウンロードする。その後、ユーザーがその画像の1つをタップすると、ユーザーがズームおよびスクロールできる別のUIViewControllerにセグメンテーションする必要があります。

私が見た多くの例では、人々はイメージのURLを送信し、何度も何度もそれを取っています(コントローラと別のイメージでは同じイメージ)。私はそれがパフォーマンスを低下させると思う。だから私はコントローラ間でUIImageオブジェクトを送信します。

正しいですか?

// MARK: - Navigation 
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if segue.identifier == Storyboard.SearchSegue { 
      if let svc = segue.destinationViewController as? SearchResultsTableViewController { 
       if let cell = sender as? TextTableViewCell { 
        if let text = cell.hashtagLabel.text { 
         if text.hasPrefix("@") || text.hasPrefix("#") { 
          svc.searchText = text 
         } 
        } 
       } 
      } else if let svc = segue.destinationViewController as? ImageViewController { 
       if let cell = sender as? ImagesTableViewCell { 
        svc.image = 
       } 
      } 
     } 
} 

svc.imageはVARです:あなたは別のを使用している場合にのみ意味をなす機能

private func fetchImage() { 
     if let u = url { 
      spinner?.startAnimating() 
      dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0)) { 
       let contentsOfURL = NSData(contentsOfURL: u) 
       dispatch_async(dispatch_get_main_queue()) { 
        if u == self.url { 
         if let imageData = contentsOfURL { 
          self.imageVar = UIImage(data: imageData) 
         } else { 
          self.spinner.stopAnimating() 
         } 
        } 
       } 
      } 
     } 
} 
+0

私はあなたに提案を与えることができますので、コードを書いてください。 –

+0

イメージをダウンロードするときにドキュメントディレクトリにイメージを保存したくない場合は、必要なときはいつでもドキュメントディレクトリパスを使用し、不要な場合はディレクトリから削除します。 –

+1

キャッシュシステムを使用してネットワークの使用を防ぎ、読み込みを高速化する場合は、イメージURLを送信できると思います。イメージ(またはイメージ)をメモリに保持する場合、メモリ管理/リークを念頭に置く必要があります。 – Bisca

答えて

0

をフェッチ

var image: UIImage? { 
     get { 
      return imageView.image 
     } 
     set { 
      imageView.image = newValue 
      imageView.sizeToFit() 
      scrollView?.contentSize = imageView.frame.size 
     } 
} 

とcell.imageVar

var imageVar: UIImage? { 
     get { 
      return imageField.image 
     } 

     set { 
      imageField.image = newValue 
      spinner.stopAnimating() 
     } 
} 

画像サイズ。たとえば、セル内で画像を使用している場合は、小さな画像、サムネイルを使用してダウンロードを高速化する必要があります。細部を見て、画像を拡大したいときは、より大きな画像を使用する必要があります(したがって、URLを使用して取得する必要があります)。 しかし、画像サイズが1つだけの場合は、UIImageをView Controllerに渡すのはまったく正しいです。

+0

です 'オーバーライドFUNCのtableView(のtableView:のUITableView、heightForRowAtIndexPath indexPath:NSIndexPath) - > CGFloat { let =註釈[indexPath.section] [indexPath.row] メディアをletと記述する場合は? MediaItem { 戻りview.bounds.size.width/CGFloat(media.aspectRatio) }他{ リターンUITableViewAutomaticDimension }} ' – Ilya

+0

小さな画像、サムネイル画像をダウンロードする方法? – Ilya

+0

私の意見では、(セルで使用する)小さな画像をフェッチするwebserviceパラメータがない場合、ビューコントローラを通してuiimageを渡します。 – javiazo

0

イメージをキャッシュすると思います。ドキュメントディレクトリにイメージを保存し、そのリンクを使用して他の場所に読み込むことができます。しかし、あなたが念頭に置いておく必要があることの1つは、イメージをこのようにキャッシュしたい期間とそれらを削除する仕組みを把握する必要があることです。 1つのセッションでのみイメージを使用する場合は、NSCacheを使用することもできます。

関連する問題