У меня есть URL
https://fotorusapi20161004041801.azurewebsites.net/api/fotorus/1
Когда я нажимаю этот URL, я получаю массив словарей в качестве ответа.
[{
"Height" : 700,
"PreviewPath" : "http:\/\/mobisoftframe.azureedge.net\/previewframe\/pre_pip132.jpg",
"CategoryName" : [
"PIP"
],
"Width" : 450,
"FramePath" : "http:\/\/mobisoftframe.azureedge.net\/frames\/pip132.png",
"LayoutID" : 132,
"Frames" : [
{
"X" : 99,
"Y" : 307,
"isBlur" : false,
"Height" : 245,
"MaskImagePath" : null,
"Width" : 238
}
],
"FrameCount" : 1
},
{
"Height" : 700,
"PreviewPath" : "http:\/\/mobisoftframe.azureedge.net\/previewframe\/pre_pip133.jpg",
"CategoryName" : [
"PIP"
],
"Width" : 450,
"FramePath" : "http:\/\/mobisoftframe.azureedge.net\/frames\/pip133.png",
"LayoutID" : 133,
"Frames" : [
{
"X" : 26,
"Y" : 272,
"isBlur" : false,
"Height" : 182,
"MaskImagePath" : null,
"Width" : 190
}
],
"FrameCount" : 1
}
]
В ответ я получаю более 100 таких словарей.
Код для получения ответа выглядит следующим образом: -
//MARK: Api Calling
func callApi(category:String,completion:@escaping (Bool)-> Void) {
NetworkClass().callApiService(categoryCount:category) { (result,error) in
guard let response = result else {
hideProgressHud(view:self.view)
self.showalert(message:(error?.localizedDescription)!, title:"")
completion(false)
return
}
let parsedPIPResponse = populatePIPResponse(jsonData: response)
selectedCategoryPreviewPath.removeAll()
for objects in parsedPIPResponse{
selectedCategoryPreviewPath.append(objects.PreviewPath!)
}
completion(true)
}
}
//Now I am populating the collectionview as follows:-
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier:"categoryHolderCVCell", for:indexPath) as! CategoryHolderCVCell
collectionView.contentInset = UIEdgeInsets(top:50, left: 0, bottom: 50, right: 0)
let cell = collectionView.dequeueReusableCell(withReuseIdentifier:"frameCVCell", for:indexPath) as! FrameCVCell
let url = URL.init(string: selectedCategoryPreviewPath[indexPath.row])
cell.frameCategoryImageView.af_setImage(
withURL: url!,
placeholderImage: nil,
filter: nil,
imageTransition:.noTransition,
completion: { response in
}
)
return cell
}
При выборе строк я управляю данными следующим образом: -
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
showProgressHud(view:self.view)
callApi(category:String(indexPath.row+1)) { (success) in
if(success){
self.sliderHorizontalConstraint.constant = self.sliderView.frame.size.width*CGFloat(indexPath.item)
UIView.animate(withDuration:0.75, delay:0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut, animations: {
self.view.layoutIfNeeded()
}, completion:nil)
let cell = collectionView.cellForItem(at: indexPath) as! CategoryCVCell
cell.tintColor = UIColor.blue
self.selectedIndexPathRow = indexPath.row
self.categoryCollectionView.reloadData()
self.categoryHolderCollectionView.reloadData()
hideProgressHud(view:self.view)
}
}
}
Вся эта задача занимает много времени. Мне нужна помощь, чтобы сократить время и улучшить плавность, когда я вызываю api fetch imageurl и заставляю пользователя ждать, пока он извлечет все URL-адреса изображения, чтобы я мог использовать эти URL-адреса для получения уменьшенного изображения .
Я реализую это впервые. Пожалуйста, помогите или руководство, чтобы улучшить производительность задачи.
Любая помощь или руководство было бы заметно. Заранее спасибо!