수색…
가장 쉬운 방법
가장 간단한 방법은 Alamofire 와 UIImageViewExtension 을 사용하는 것 입니다. 우리가 필요로하는 것은 그 안에 imageView를 가지고있는 셀을 가진 tableview이고 imageView
라고 부를 수 있습니다.
tableForView의 cellForRowAt : 함수에서 이미지를 다운로드하고 다음과 같이 설정합니다.
let url = URL(string: "https://httpbin.org/image/png")!
let placeholderImage = UIImage(named: "placeholder")!
imageView.af_setImage(withURL: url, placeholderImage: placeholderImage)
url은 다운로드하려는 이미지를 가리켜 야하며 placeHolder 이미지는 저장된 이미지 여야합니다. 그런 다음 주어진 url에서 이미지를 다운로드하는 imageView
에서 af_setImage
메소드를 호출하고 다운로드하는 동안 자리 표시 자 이미지가 표시됩니다. 이미지가 다운로드되는 즉시 요청 된 이미지가 표시됩니다.
다운로드 후 셀이 계속 표시되는지 확인하십시오.
때때로 다운로드가 셀이 표시되는 것보다 오래 걸립니다. 이 경우 다운로드 한 이미지가 잘못된 셀에 표시 될 수 있습니다. 이 문제를 해결하기 위해 UIImageView Extension을 사용할 수 없습니다.
우리는 여전히 Alamofire 를 사용할 것이지만 완성 처리기를 사용하여 이미지를 표시 할 것입니다.
이 시나리오에서는 아직 imageView가있는 셀이있는 tableView가 필요합니다. cellForRowAt : 메소드에서 다음 코드를 사용하여 이미지를 다운로드합니다.
let placeholderImage = UIImage(named: "placeholder")!
imageView.image = placeholderImage
let url = URL(string: "https://httpbin.org/image/png")!
Alamofire.request(url!, method: .get).responseImage { response in
guard let image = response.result.value else { return }
if let updateCell = tableView.cellForRow(at: indexPath) {
updateCell.imageView.image = image
}
}
이 예제에서는 먼저 이미지를 자리 표시 자 이미지로 설정합니다. 그 후에 우리는 Alamofire 의 request
방법으로 이미지를 다운로드합니다. URL을 첫 번째 인수로 전달하고 이미지를 얻고 자하므로 .get
HTTP 메소드를 사용합니다. 이미지를 다운로드하기 때문에 응답을 이미지로 만들기를 원하기 때문에 .responseImage
메서드를 사용합니다.
이미지가 다운로드 된 후 클로저가 호출되고 먼저 다운로드 한 이미지가 실제로 있는지 확인합니다. 그런 다음 cellForRow (at : indexPath)가 nil을 반환하지 않는지 확인하여 셀이 계속 표시되는지 확인합니다. 아무 일도 일어나지 않으면, 우리는 최근에 다운로드 한 이미지를 할당하지 않습니다.
이 마지막 if 문은 사용자가 셀을 이미 스크롤 한 경우 updateCell이 nil이고 if 문이 nil을 반환하면 셀이 계속 표시되는지 확인합니다. 이렇게하면 셀에 잘못된 이미지가 표시되는 것을 방지 할 수 있습니다.