実現したいこと
ProfileButtonのimageViewにKingfisherというライブラリを利用して画像URLを渡して画像を表示しています。問題なく表示されるのですが、1度buttonをtapしてしまうとButton内の画像(imageView)が消えてしまいます。それを消えないようにしたいです。
ソースコード①ボタンクラス
swift
1import Foundation 2import UIKit 3import Kingfisher 4 5class ProfileButton: UIButton { 6 7 private let profileButtonSize = CGSize(width: 32, height: 32) 8 9 override init(frame: CGRect) { 10 super.init(frame: frame) 11 12 DispatchQueue.main.async { 13 self.imageView!.isHidden = false 14 } 15 16 imageView!.frame = CGRect(origin: CGPoint.zero, size: profileButtonSize) 17 imageView!.clipsToBounds = true 18 imageView!.contentMode = .scaleAspectFill 19 imageView!.layer.cornerRadius = profileButtonSize.width / 2 20 } 21 22 required init?(coder: NSCoder) { 23 fatalError("init(coder:) has not been implemented") 24 } 25 26 var profileImageUrl: String? { 27 didSet { 28 29 let scale = UIScreen.main.scale 30 let imageSize = CGSize(width: profileButtonSize.width * scale, height: profileButtonSize.height * scale) 31 let resizingProcessor = ResizingImageProcessor(referenceSize: imageSize) 32 let options = [KingfisherOptionsInfoItem.processor(resizingProcessor)] 33 self.imageView!.setImage(urlString: profileImageUrl!, placeholder: #imageLiteral(resourceName: "ic_header_profile"), options: options) 34 } 35 } 36}
ソースコード②呼び出し元viewController
swift
1//プロフィールアイコンボタンをセットする 2let profileButton = ProfileButton() 3profileButton.profileImageUrl = UserDefaults.Channel!.urlImage 4profileButton.isUserInteractionEnabled = true 5profileButton.addTarget(self, action: #selector(tapOnMenu(_:)), for: .touchUpInside) 6let menuItem = UIBarButtonItem(customView: profileButton) 7navigationItem.leftBarButtonItem = menuItem 8 9navigationItem.title = Localizable.DashboardScreen.titleDashboardScreen.localized() 10if let containerVC = AppDelegate.share()?.getContainerViewController() { 11 self.containerView.panGestureRecognizer.require(toFail: containerVC.edgePanGestureRecognizer) 12} 13 14UserDefaults.standard.rx 15 .observe(Channel.self, UserDefaults.keySaveChannel) 16 .observeOn(MainScheduler.instance) 17 .subscribe(onNext: { [weak self] _ in 18 guard let `self` = self, UserDefaults.Channel != nil else { 19 return 20 } 21 22 //プロフィールアイコンボタンをセットする 23 let profileButton = ProfileButton() 24 profileButton.profileImageUrl = UserDefaults.Channel!.urlImage 25 26 profileButton.isUserInteractionEnabled = true 27 profileButton.addTarget(self, action: #selector(self.tapOnMenu(_:)), for: .touchUpInside) 28 29 let menuItem = UIBarButtonItem(customView: profileButton) 30 self.navigationItem.leftBarButtonItem = menuItem 31 32 }).disposed(by: disposeBag)
試したこと
元々画像が表示されず困っていたのですが以下のコードをProfileButtonクラスに挿入したことで画像が表示されるようになりました。ですがボタンをタップしてしまうと画像が表示されなくなってしまうので、これと同じでスレッド関連の何かが影響しているのではないかと思いいろいろと試行錯誤してみましたが解決することができかねている状況です。皆様のお力添えいただけますと幸いです。
DispatchQueue.main.async { self.imageView!.isHidden = false }
補足情報
Swift 5.0.1
Xcode 11.2
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/06 10:26