// // RankingTableViewCell.swift // PhotoRank // // Created by Shadowfacts on 8/29/19. // Copyright © 2019 Shadowfacts. All rights reserved. // import UIKit import Photos class RankingTableViewCell: UITableViewCell { @IBOutlet weak var assetImageView: UIImageView! @IBOutlet weak var scoreLabel: UILabel! @IBOutlet weak var favoriteButton: UIButton! var assetIdentifier: String? override func awakeFromNib() { super.awakeFromNib() assetImageView.layer.masksToBounds = true assetImageView.layer.cornerRadius = 8 } func updateUI(asset: PHAsset, score: Int) { self.assetIdentifier = asset.localIdentifier PhotosHelper.requestThumbnail(for: asset, targetSize: assetImageView.bounds.size) { (image) in guard self.assetIdentifier == asset.localIdentifier else { return } self.assetImageView.image = image } scoreLabel.text = "Score: \(score)" updateFavoriteButton(favorited: asset.isFavorite) } private func updateFavoriteButton(favorited: Bool) { let name = favorited ? "heart.fill" : "heart" let image = UIImage(systemName: name) favoriteButton.setImage(image, for: .normal) } @IBAction func favoriteButtonPressed() { let generator = UINotificationFeedbackGenerator() generator.prepare() guard let assetIdentifier = assetIdentifier else { generator.notificationOccurred(.error) return } let result = PHAsset.fetchAssets(withLocalIdentifiers: [assetIdentifier], options: nil) guard result.count == 1 else { generator.notificationOccurred(.error) return } let asset = result.object(at: 0) PHPhotoLibrary.shared().performChanges({ let request = PHAssetChangeRequest(for: asset) request.isFavorite = !asset.isFavorite }) { (success, error) in if success { generator.notificationOccurred(.success) DispatchQueue.main.async { guard self.assetIdentifier == assetIdentifier else { return } self.updateFavoriteButton(favorited: !asset.isFavorite) } } else { generator.notificationOccurred(.error) print("Error ocurred changing favorite: \(String(describing: error))") } } } }