Wire up the header image to be actually displayed

This commit is contained in:
Jed Fox 2022-11-16 23:05:48 -05:00
parent 23a0943b12
commit 4af5d3910a
No known key found for this signature in database
GPG Key ID: 0B61D18EA54B47E1
2 changed files with 20 additions and 5 deletions

View File

@ -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: {

View File

@ -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
}