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,60 +140,39 @@ extension DataSourceFacade {
|
|||||||
case profileBanner(ProfileHeaderView)
|
case profileBanner(ProfileHeaderView)
|
||||||
}
|
}
|
||||||
|
|
||||||
func thumbnail() async -> UIImage? {
|
func thumbnail() -> UIImage? {
|
||||||
return await imageView.image
|
return imageView.image
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@MainActor
|
@MainActor
|
||||||
static func coordinateToMediaPreviewScene(
|
static func coordinateToMediaPreviewScene(
|
||||||
dependency: NeedsDependency & MediaPreviewableViewController,
|
dependency: NeedsDependency & MediaPreviewableViewController,
|
||||||
user: ManagedObjectRecord<MastodonUser>,
|
account: Mastodon.Entity.Account,
|
||||||
previewContext: ImagePreviewContext
|
previewContext: ImagePreviewContext
|
||||||
) async throws {
|
) async throws {
|
||||||
let managedObjectContext = dependency.context.managedObjectContext
|
|
||||||
|
|
||||||
var _avatarAssetURL: String?
|
let avatarAssetURL = account.avatar
|
||||||
var _headerAssetURL: String?
|
let headerAssetURL = account.header
|
||||||
|
|
||||||
try await managedObjectContext.perform {
|
let thumbnail = previewContext.thumbnail()
|
||||||
guard let user = user.object(in: managedObjectContext) else { return }
|
|
||||||
_avatarAssetURL = user.avatar
|
|
||||||
_headerAssetURL = user.header
|
|
||||||
}
|
|
||||||
|
|
||||||
let thumbnail = await previewContext.thumbnail()
|
let source: MediaPreviewTransitionItem.Source
|
||||||
|
|
||||||
let source: MediaPreviewTransitionItem.Source = {
|
|
||||||
switch previewContext.containerView {
|
switch previewContext.containerView {
|
||||||
case .profileAvatar(let view): return .profileAvatar(view)
|
case .profileAvatar(let view): source = .profileAvatar(view)
|
||||||
case .profileBanner(let view): return .profileBanner(view)
|
case .profileBanner(let view): source = .profileBanner(view)
|
||||||
}
|
}
|
||||||
}()
|
|
||||||
|
|
||||||
let mediaPreviewTransitionItem: MediaPreviewTransitionItem = {
|
let mediaPreviewTransitionItem = MediaPreviewTransitionItem(
|
||||||
let item = MediaPreviewTransitionItem(
|
|
||||||
source: source,
|
source: source,
|
||||||
previewableViewController: dependency
|
previewableViewController: dependency
|
||||||
)
|
)
|
||||||
|
|
||||||
let imageView = previewContext.imageView
|
let imageView = previewContext.imageView
|
||||||
item.initialFrame = {
|
mediaPreviewTransitionItem.initialFrame = imageView.superview?.convert(imageView.frame, to: nil)
|
||||||
let initialFrame = imageView.superview!.convert(imageView.frame, to: nil)
|
mediaPreviewTransitionItem.image = thumbnail
|
||||||
assert(initialFrame != .zero)
|
mediaPreviewTransitionItem.aspectRatio = thumbnail?.size ?? CGSize(width: 100, height: 100)
|
||||||
return initialFrame
|
mediaPreviewTransitionItem.sourceImageViewCornerRadius = {
|
||||||
}()
|
|
||||||
|
|
||||||
item.image = thumbnail
|
|
||||||
|
|
||||||
item.aspectRatio = {
|
|
||||||
if let thumbnail = thumbnail {
|
|
||||||
return thumbnail.size
|
|
||||||
}
|
|
||||||
return CGSize(width: 100, height: 100)
|
|
||||||
}()
|
|
||||||
|
|
||||||
item.sourceImageViewCornerRadius = {
|
|
||||||
switch previewContext.containerView {
|
switch previewContext.containerView {
|
||||||
case .profileAvatar:
|
case .profileAvatar:
|
||||||
return ProfileHeaderView.avatarImageViewCornerRadius
|
return ProfileHeaderView.avatarImageViewCornerRadius
|
||||||
@ -202,24 +181,19 @@ extension DataSourceFacade {
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
return item
|
let mediaPreviewItem: MediaPreviewViewModel.PreviewItem
|
||||||
}()
|
|
||||||
|
|
||||||
|
|
||||||
let mediaPreviewItem: MediaPreviewViewModel.PreviewItem = {
|
|
||||||
switch previewContext.containerView {
|
switch previewContext.containerView {
|
||||||
case .profileAvatar:
|
case .profileAvatar:
|
||||||
return .profileAvatar(.init(
|
mediaPreviewItem = .profileAvatar(.init(
|
||||||
assetURL: _avatarAssetURL,
|
assetURL: avatarAssetURL,
|
||||||
thumbnail: thumbnail
|
thumbnail: thumbnail
|
||||||
))
|
))
|
||||||
case .profileBanner:
|
case .profileBanner:
|
||||||
return .profileBanner(.init(
|
mediaPreviewItem = .profileBanner(.init(
|
||||||
assetURL: _headerAssetURL,
|
assetURL: headerAssetURL,
|
||||||
thumbnail: thumbnail
|
thumbnail: thumbnail
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
}()
|
|
||||||
|
|
||||||
guard mediaPreviewItem.isAssetURLValid else {
|
guard mediaPreviewItem.isAssetURLValid else {
|
||||||
return
|
return
|
||||||
|
@ -151,8 +151,8 @@ extension MediaPreviewViewModel {
|
|||||||
return true // default valid
|
return true // default valid
|
||||||
case .profileBanner(let item):
|
case .profileBanner(let item):
|
||||||
guard let assertURL = item.assetURL else { return false }
|
guard let assertURL = item.assetURL else { return false }
|
||||||
guard !assertURL.hasSuffix("missing.png") else { return false }
|
|
||||||
return true
|
return assertURL.hasSuffix("missing.png") == false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -274,37 +274,29 @@ extension ProfileHeaderViewController {
|
|||||||
// MARK: - ProfileHeaderViewDelegate
|
// MARK: - ProfileHeaderViewDelegate
|
||||||
extension ProfileHeaderViewController: ProfileHeaderViewDelegate {
|
extension ProfileHeaderViewController: ProfileHeaderViewDelegate {
|
||||||
func profileHeaderView(_ profileHeaderView: ProfileHeaderView, avatarButtonDidPressed button: AvatarButton) {
|
func profileHeaderView(_ profileHeaderView: ProfileHeaderView, avatarButtonDidPressed button: AvatarButton) {
|
||||||
#warning("TODO: Implement")
|
Task {
|
||||||
// guard let user = viewModel.user else { return }
|
try await DataSourceFacade.coordinateToMediaPreviewScene(
|
||||||
// let record: ManagedObjectRecord<MastodonUser> = .init(objectID: user.objectID)
|
dependency: self,
|
||||||
//
|
account: viewModel.account,
|
||||||
// Task {
|
previewContext: DataSourceFacade.ImagePreviewContext(
|
||||||
// try await DataSourceFacade.coordinateToMediaPreviewScene(
|
imageView: button.avatarImageView,
|
||||||
// dependency: self,
|
containerView: .profileAvatar(profileHeaderView)
|
||||||
// user: record,
|
)
|
||||||
// previewContext: DataSourceFacade.ImagePreviewContext(
|
)
|
||||||
// imageView: button.avatarImageView,
|
}
|
||||||
// containerView: .profileAvatar(profileHeaderView)
|
|
||||||
// )
|
|
||||||
// )
|
|
||||||
// } // end Task
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func profileHeaderView(_ profileHeaderView: ProfileHeaderView, bannerImageViewDidPressed imageView: UIImageView) {
|
func profileHeaderView(_ profileHeaderView: ProfileHeaderView, bannerImageViewDidPressed imageView: UIImageView) {
|
||||||
#warning("TODO: Implement")
|
Task {
|
||||||
// guard let account = viewModel.account else { return }
|
try await DataSourceFacade.coordinateToMediaPreviewScene(
|
||||||
// let record: ManagedObjectRecord<MastodonUser> = .init(objectID: user.objectID)
|
dependency: self,
|
||||||
//
|
account: viewModel.account,
|
||||||
// Task {
|
previewContext: DataSourceFacade.ImagePreviewContext(
|
||||||
// try await DataSourceFacade.coordinateToMediaPreviewScene(
|
imageView: imageView,
|
||||||
// dependency: self,
|
containerView: .profileBanner(profileHeaderView)
|
||||||
// user: record,
|
)
|
||||||
// previewContext: DataSourceFacade.ImagePreviewContext(
|
)
|
||||||
// imageView: imageView,
|
}
|
||||||
// containerView: .profileBanner(profileHeaderView)
|
|
||||||
// )
|
|
||||||
// )
|
|
||||||
// } // end Task
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func profileHeaderView(
|
func profileHeaderView(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user