80 lines
2.5 KiB
Swift
80 lines
2.5 KiB
Swift
//
|
|
// 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))")
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|