Как загрузить изображение с сервера и отобразить с помощью анимации постепенного исчезновения в Swift? - PullRequest
0 голосов
/ 27 мая 2019

Я хочу загрузить 10 изображений с сервера, используя alamofire, и анимировать это изображение в изображении uicollectionview ... в бесконечном цикле, как приложение для фотографий в окне 10 ... Кто-нибудь знает ?? Я выскочил, но не нашел подходящего ответа ..Некоторые говорят использовать таймер .. но я думаю, что это неосуществимо .. `

if let employeeImage = employeeModelForDisplay?.employeeImageArray {
     self.animateImage(at: 0 , imageArray: employeeImage)
  }  
 func animateImage(at index: Int, imageArray:[String]) {
        if index < imageArray.count {
            self.badgeImageView.alpha = 0.3
             self.badgeImageView.setImage(link: imageArray[index], imageType: .UserImage)
            UIView.animate(withDuration: 3.0, delay: 0.5, options: [.transitionCrossDissolve], animations: {
                self.badgeImageView.alpha = 1.0
            }) { (completed) in
                self.animateImage(at: index + 1, imageArray: imageArray)
            }
        } else {
               //self.animateImage(at: 0, imageArray: imageArray)           
        }
    }

`

Я кодировал код выше в uicollectionviewcell.

1 Ответ

0 голосов
/ 27 мая 2019

Подход -1:

Установить animationImages на imageView, т. Е.

let imagesArray = [UIImage(named: "image"), UIImage(named: "image1"), UIImage(named: "image2")]
imageView.animationImages = imagesArray.compactMap({$0})
imageView.animationDuration = 2.0
imageView.startAnimating()

Подход-2:

Вы можете создать свою собственную анимацию, например,

let imagesArray = [UIImage(named: "image"), UIImage(named: "image1"), UIImage(named: "image2")]

Метод управления анимацией изображений,

func animateImage(at index: Int) {
    if index < imagesArray.count {
        self.imageView.image = self.imagesArray[index]
        self.imageView.alpha = 0
        UIView.animate(withDuration: 2.0, delay: 0.0, options: [.curveEaseInOut], animations: {
            self.imageView.alpha = 1.0
        }) { (completed) in
            self.animateImage(at: index + 1)
        }
    } else {
        self.animateImage(at: 0)
    }
}

Инициируйте метод с помощью index 0, то есть

self.animateImage(at: 0)

Edit-1:

Чтобы получить images из server перед их анимацией в imageView,

func downloadImages() {
    let imageUrls = [String]()
    var imagesArray = [UIImage]()

    let dispatchGroup = DispatchGroup()
    dispatchGroup.notify(queue: DispatchQueue.main) {[weak self] in
        self?.imageView.animationImages = imagesArray.compactMap({$0})
        self?.imageView.animationDuration = 2.0
        self?.imageView.startAnimating()
    }

    imageUrls.forEach { (imageUrl) in
        if let url = URL(string: imageUrl) {
            dispatchGroup.enter()
            URLSession.shared.dataTask(with: url, completionHandler: { (data, urlResponse, error) in
                if let data = data, let image = UIImage(data: data) {
                    imagesArray.append(image)
                    dispatchGroup.leave()
                }
            }).resume()
        }
    }
}
...