0

두 개의 Uiview 컨트롤러간에 UIImage를 보내는 것이 맞습니까?UIImage를 두 컨트롤러간에 전송하는 것이 맞습니까?

저는 CS193P Spring - Smashtag의 과제 4를 진행하고 있습니다.

여기 저기에서 언급 한 표의 데이터 (주석, 해시 태그, 이미지, URL)의 추가 데이터를 구현해야합니다. 거기에 적절한 세포에 이미지를 놓아야합니다. 그 목적을 위해 나는 이미 그것을 다운로드한다. 그 후 사용자가 해당 이미지 중 하나를 두드리면 사용자가 이미지를 확대/축소하고 스크롤 할 수있는 다른 UIViewController와 연결되어야합니다.

내가 본 많은 사례에서 사람들은 이미지의 url을 보내고 또 다른 이미지를 가져옵니다 (다른 컨트롤러와 동일한 이미지의 경우). 나는 그것이 성능을 떨어 뜨린다 고 생각한다. 그래서 컨트롤러 사이에 UIImage 객체를 보냅니다.

하지만 맞습니까? 서로 다른 사용하는 경우에만 의미가

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() 
     } 
} 

가져 오기 기능

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

:

// 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입니다 이미지 크기. 예를 들어, 셀에서 이미지를 사용하는 경우 다운로드 속도를 높이려면 작은 이미지 (축소판 이미지)를 사용해야합니다. 그런 다음 세부 정보를보고 이미지를 확대하고 싶다면 더 큰 이미지를 사용해야합니다 (따라서 URL을 사용하여 이미지를 검색해야합니다). 그러나 하나의 이미지 크기 만있는 경우보기 컨트롤러를 통해 UIImage를 전달하는 것이 정확합니다.

+0

인'재정 FUNC있는 tableView (있는 tableView : jQuery과, heightForRowAtIndexPath indexPath : NSIndexPath) - > CGFloat { let media가 = 언급으로 언급된다면, 언급 = 언급 [indexPath.section] [indexPath.row] ? MediaItem { 반환 view.bounds.size.width/CGFloat (media.aspectRatio) } 다른 { 반환 UITableViewAutomaticDimension } }' – Ilya

+0

어떻게 작은 이미지 미리보기를 다운로드? – Ilya

+0

내 생각에, 셀에 사용할 작은 이미지를 가져 오는 webservice 매개 변수가 없다면 뷰 컨트롤러를 통해 uiimage를 전달할 것입니다. – javiazo

0

이미지 캐싱을 생각해 볼 수 있습니다. 문서 디렉토리에 이미지를 저장하고 링크를 사용하여 다른 위치에서로드 할 수 있습니다. 그러나 염두에 두어야 할 것은 이미지를이 방식으로 캐시하려는 기간과 삭제할 메커니즘을 추적해야한다는 것입니다. 한 세션에 대해서만 이미지를 원한다면 NSCache를 사용할 수도 있습니다.

관련 문제