Плавное заполнение изображения в режиме просмотра после извлечения URL-адреса из URL-адреса в быстром - PullRequest
0 голосов
/ 06 мая 2019

У меня есть 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-адреса для получения уменьшенного изображения .

Я реализую это впервые. Пожалуйста, помогите или руководство, чтобы улучшить производительность задачи.

Любая помощь или руководство было бы заметно. Заранее спасибо!

...