// Copyright © 2021 Metabolist. All rights reserved. import Mastodon import UIKit extension UIView { private static let defaultContentsRectSize = CGSize(width: 1, height: 1) func setContentsRect(focus: Attachment.Meta.Focus, mediaSize: CGSize) { let aspectRatio = mediaSize.width / mediaSize.height let viewAspectRatio = bounds.width / bounds.height var origin = CGPoint.zero if viewAspectRatio > aspectRatio { let mediaProportionalHeight = mediaSize.height * bounds.width / mediaSize.width let maxPan = (mediaProportionalHeight - bounds.height) / (2 * mediaProportionalHeight) origin.y = CGFloat(-focus.y) * maxPan } else { let mediaProportionalWidth = mediaSize.width * bounds.height / mediaSize.height let maxPan = (mediaProportionalWidth - bounds.width) / (2 * mediaProportionalWidth) origin.x = CGFloat(focus.x) * maxPan } layer.contentsRect = CGRect(origin: origin, size: Self.defaultContentsRectSize) } // http://www.openradar.me/25087688 var isHidden_stackViewSafe: Bool { get { isHidden } set { if isHidden != newValue { isHidden = newValue alpha = isHidden ? 0 : 1 } } } }