mirror of
https://github.com/mastodon/mastodon-ios
synced 2025-04-11 22:58:02 +02:00
Make image clickable again (IOS-192)
This commit is contained in:
parent
dda0ae2d7c
commit
9e49775201
@ -140,87 +140,61 @@ extension DataSourceFacade {
|
||||
case profileBanner(ProfileHeaderView)
|
||||
}
|
||||
|
||||
func thumbnail() async -> UIImage? {
|
||||
return await imageView.image
|
||||
func thumbnail() -> UIImage? {
|
||||
return imageView.image
|
||||
}
|
||||
}
|
||||
|
||||
@MainActor
|
||||
static func coordinateToMediaPreviewScene(
|
||||
dependency: NeedsDependency & MediaPreviewableViewController,
|
||||
user: ManagedObjectRecord<MastodonUser>,
|
||||
account: Mastodon.Entity.Account,
|
||||
previewContext: ImagePreviewContext
|
||||
) async throws {
|
||||
let managedObjectContext = dependency.context.managedObjectContext
|
||||
|
||||
let avatarAssetURL = account.avatar
|
||||
let headerAssetURL = account.header
|
||||
|
||||
let thumbnail = previewContext.thumbnail()
|
||||
|
||||
var _avatarAssetURL: String?
|
||||
var _headerAssetURL: String?
|
||||
|
||||
try await managedObjectContext.perform {
|
||||
guard let user = user.object(in: managedObjectContext) else { return }
|
||||
_avatarAssetURL = user.avatar
|
||||
_headerAssetURL = user.header
|
||||
let source: MediaPreviewTransitionItem.Source
|
||||
switch previewContext.containerView {
|
||||
case .profileAvatar(let view): source = .profileAvatar(view)
|
||||
case .profileBanner(let view): source = .profileBanner(view)
|
||||
}
|
||||
|
||||
let thumbnail = await previewContext.thumbnail()
|
||||
|
||||
let source: MediaPreviewTransitionItem.Source = {
|
||||
|
||||
let mediaPreviewTransitionItem = MediaPreviewTransitionItem(
|
||||
source: source,
|
||||
previewableViewController: dependency
|
||||
)
|
||||
|
||||
let imageView = previewContext.imageView
|
||||
mediaPreviewTransitionItem.initialFrame = imageView.superview?.convert(imageView.frame, to: nil)
|
||||
mediaPreviewTransitionItem.image = thumbnail
|
||||
mediaPreviewTransitionItem.aspectRatio = thumbnail?.size ?? CGSize(width: 100, height: 100)
|
||||
mediaPreviewTransitionItem.sourceImageViewCornerRadius = {
|
||||
switch previewContext.containerView {
|
||||
case .profileAvatar(let view): return .profileAvatar(view)
|
||||
case .profileBanner(let view): return .profileBanner(view)
|
||||
}
|
||||
}()
|
||||
|
||||
let mediaPreviewTransitionItem: MediaPreviewTransitionItem = {
|
||||
let item = MediaPreviewTransitionItem(
|
||||
source: source,
|
||||
previewableViewController: dependency
|
||||
)
|
||||
|
||||
let imageView = previewContext.imageView
|
||||
item.initialFrame = {
|
||||
let initialFrame = imageView.superview!.convert(imageView.frame, to: nil)
|
||||
assert(initialFrame != .zero)
|
||||
return initialFrame
|
||||
}()
|
||||
|
||||
item.image = thumbnail
|
||||
|
||||
item.aspectRatio = {
|
||||
if let thumbnail = thumbnail {
|
||||
return thumbnail.size
|
||||
}
|
||||
return CGSize(width: 100, height: 100)
|
||||
}()
|
||||
|
||||
item.sourceImageViewCornerRadius = {
|
||||
switch previewContext.containerView {
|
||||
case .profileAvatar:
|
||||
return ProfileHeaderView.avatarImageViewCornerRadius
|
||||
case .profileBanner:
|
||||
return 0
|
||||
}
|
||||
}()
|
||||
|
||||
return item
|
||||
}
|
||||
}()
|
||||
|
||||
|
||||
let mediaPreviewItem: MediaPreviewViewModel.PreviewItem = {
|
||||
switch previewContext.containerView {
|
||||
|
||||
let mediaPreviewItem: MediaPreviewViewModel.PreviewItem
|
||||
switch previewContext.containerView {
|
||||
case .profileAvatar:
|
||||
return .profileAvatar(.init(
|
||||
assetURL: _avatarAssetURL,
|
||||
mediaPreviewItem = .profileAvatar(.init(
|
||||
assetURL: avatarAssetURL,
|
||||
thumbnail: thumbnail
|
||||
))
|
||||
case .profileBanner:
|
||||
return .profileBanner(.init(
|
||||
assetURL: _headerAssetURL,
|
||||
mediaPreviewItem = .profileBanner(.init(
|
||||
assetURL: headerAssetURL,
|
||||
thumbnail: thumbnail
|
||||
))
|
||||
}
|
||||
}()
|
||||
|
||||
}
|
||||
|
||||
guard mediaPreviewItem.isAssetURLValid else {
|
||||
return
|
||||
}
|
||||
|
@ -151,8 +151,8 @@ extension MediaPreviewViewModel {
|
||||
return true // default valid
|
||||
case .profileBanner(let item):
|
||||
guard let assertURL = item.assetURL else { return false }
|
||||
guard !assertURL.hasSuffix("missing.png") else { return false }
|
||||
return true
|
||||
|
||||
return assertURL.hasSuffix("missing.png") == false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -268,43 +268,35 @@ extension ProfileHeaderViewController {
|
||||
profileHeaderView.avatarButton.alpha = alpha
|
||||
profileHeaderView.editAvatarBackgroundView.alpha = alpha
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
// MARK: - ProfileHeaderViewDelegate
|
||||
extension ProfileHeaderViewController: ProfileHeaderViewDelegate {
|
||||
func profileHeaderView(_ profileHeaderView: ProfileHeaderView, avatarButtonDidPressed button: AvatarButton) {
|
||||
#warning("TODO: Implement")
|
||||
// guard let user = viewModel.user else { return }
|
||||
// let record: ManagedObjectRecord<MastodonUser> = .init(objectID: user.objectID)
|
||||
//
|
||||
// Task {
|
||||
// try await DataSourceFacade.coordinateToMediaPreviewScene(
|
||||
// dependency: self,
|
||||
// user: record,
|
||||
// previewContext: DataSourceFacade.ImagePreviewContext(
|
||||
// imageView: button.avatarImageView,
|
||||
// containerView: .profileAvatar(profileHeaderView)
|
||||
// )
|
||||
// )
|
||||
// } // end Task
|
||||
Task {
|
||||
try await DataSourceFacade.coordinateToMediaPreviewScene(
|
||||
dependency: self,
|
||||
account: viewModel.account,
|
||||
previewContext: DataSourceFacade.ImagePreviewContext(
|
||||
imageView: button.avatarImageView,
|
||||
containerView: .profileAvatar(profileHeaderView)
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
func profileHeaderView(_ profileHeaderView: ProfileHeaderView, bannerImageViewDidPressed imageView: UIImageView) {
|
||||
#warning("TODO: Implement")
|
||||
// guard let account = viewModel.account else { return }
|
||||
// let record: ManagedObjectRecord<MastodonUser> = .init(objectID: user.objectID)
|
||||
//
|
||||
// Task {
|
||||
// try await DataSourceFacade.coordinateToMediaPreviewScene(
|
||||
// dependency: self,
|
||||
// user: record,
|
||||
// previewContext: DataSourceFacade.ImagePreviewContext(
|
||||
// imageView: imageView,
|
||||
// containerView: .profileBanner(profileHeaderView)
|
||||
// )
|
||||
// )
|
||||
// } // end Task
|
||||
Task {
|
||||
try await DataSourceFacade.coordinateToMediaPreviewScene(
|
||||
dependency: self,
|
||||
account: viewModel.account,
|
||||
previewContext: DataSourceFacade.ImagePreviewContext(
|
||||
imageView: imageView,
|
||||
containerView: .profileBanner(profileHeaderView)
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
func profileHeaderView(
|
||||
|
Loading…
x
Reference in New Issue
Block a user