From 4af5d3910a7f2f3476fd205c0cfd9ed97669c7ae Mon Sep 17 00:00:00 2001 From: Jed Fox Date: Wed, 16 Nov 2022 23:05:48 -0500 Subject: [PATCH] Wire up the header image to be actually displayed --- .../Header/ProfileHeaderViewController.swift | 11 ++++++++++- .../Header/View/ProfileHeaderView+ViewModel.swift | 14 ++++++++++---- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/Mastodon/Scene/Profile/Header/ProfileHeaderViewController.swift b/Mastodon/Scene/Profile/Header/ProfileHeaderViewController.swift index 26ecbb4db..1a0dda44e 100644 --- a/Mastodon/Scene/Profile/Header/ProfileHeaderViewController.swift +++ b/Mastodon/Scene/Profile/Header/ProfileHeaderViewController.swift @@ -159,6 +159,9 @@ extension ProfileHeaderViewController { viewModel.$isUpdating .assign(to: \.isUpdating, on: profileHeaderView.viewModel) .store(in: &disposeBag) + viewModel.profileInfoEditing.$header + .assign(to: \.headerImageEditing, on: profileHeaderView.viewModel) + .store(in: &disposeBag) viewModel.profileInfoEditing.$avatar .assign(to: \.avatarImageEditing, on: profileHeaderView.viewModel) .store(in: &disposeBag) @@ -224,7 +227,13 @@ extension ProfileHeaderViewController { DispatchQueue.main.async { let cropController = CropViewController(croppingStyle: .default, image: image) cropController.delegate = self - cropController.setAspectRatioPreset(.presetSquare, animated: true) + switch self.currentImageType { + case .banner: + cropController.customAspectRatio = CGSize(width: 3, height: 1) + cropController.setAspectRatioPreset(.presetCustom, animated: true) + case .avatar: + cropController.setAspectRatioPreset(.presetSquare, animated: true) + } cropController.aspectRatioPickerButtonHidden = true cropController.aspectRatioLockEnabled = true pickerViewController.dismiss(animated: true, completion: { diff --git a/Mastodon/Scene/Profile/Header/View/ProfileHeaderView+ViewModel.swift b/Mastodon/Scene/Profile/Header/View/ProfileHeaderView+ViewModel.swift index ceb291bac..5095d7ac0 100644 --- a/Mastodon/Scene/Profile/Header/View/ProfileHeaderView+ViewModel.swift +++ b/Mastodon/Scene/Profile/Header/View/ProfileHeaderView+ViewModel.swift @@ -28,6 +28,7 @@ extension ProfileHeaderView { @Published var emojiMeta: MastodonContent.Emojis = [:] @Published var headerImageURL: URL? + @Published var headerImageEditing: UIImage? @Published var avatarImageURL: URL? @Published var avatarImageEditing: UIImage? @@ -61,14 +62,19 @@ extension ProfileHeaderView.ViewModel { func bind(view: ProfileHeaderView) { // header - Publishers.CombineLatest( + Publishers.CombineLatest4( $headerImageURL, + $headerImageEditing, + $isEditing, viewDidAppear ) - .sink { headerImageURL, _ in + .sink { headerImageURL, headerImageEditing, isEditing, _ in view.bannerImageView.af.cancelImageRequest() - let placeholder = UIImage.placeholder(color: ProfileHeaderView.bannerImageViewPlaceholderColor) - guard let bannerImageURL = headerImageURL else { + let defaultPlaceholder = UIImage.placeholder(color: ProfileHeaderView.bannerImageViewPlaceholderColor) + let placeholder = isEditing ? (headerImageEditing ?? defaultPlaceholder) : defaultPlaceholder + guard let bannerImageURL = headerImageURL, + !isEditing || headerImageEditing == nil + else { view.bannerImageView.image = placeholder return }