私が作成しているアプリの場合、ユーザーが画像をクリックしてアプリで全画面表示できるようにする必要があります。そして、ユーザーは現在のフルスクリーン画像をクリックして元のサイズにできるようにします。
これは可能ですか?
私はXcodeの初心者であり、これを行う方法を知りたいと思っています。
これは、画像をクリックしたときにフルスクリーン画像(縦横比を維持するための黒いバーを含む)を作成するコードです。
これを使用するには、画像を保持するViewControllerにこのコードを追加します。
次に、展開するimageViewについて、Attributes InspectorでuserInteractionEnabledのボックスをオンにします、TapGestureRecognizerを追加し、imageTapped
を呼び出して設定します。
@IBAction func imageTapped(sender: UITapGestureRecognizer) {
let imageView = sender.view as! UIImageView
let newImageView = UIImageView(image: imageView.image)
newImageView.frame = UIScreen.main.bounds
newImageView.backgroundColor = .blackColor()
newImageView.contentMode = .ScaleAspectFit
newImageView.userInteractionEnabled = true
let tap = UITapGestureRecognizer(target: self, action: "dismissFullscreenImage:")
newImageView.addGestureRecognizer(tap)
self.view.addSubview(newImageView)
self.navigationController?.isNavigationBarHidden = true
self.tabBarController?.tabBar.isHidden = true
}
func dismissFullscreenImage(sender: UITapGestureRecognizer) {
self.navigationController?.isNavigationBarHidden = false
self.tabBarController?.tabBar.isHidden = false
sender.view?.removeFromSuperview()
}
このコードは、他のすべてをカバーする新しいフルスクリーン画像を作成することで機能します。スーパービューからフルスクリーン画像を削除する(したがって元の画面を明らかにする)独自のTapGestureRecognizerがあります。
Swift 3および4:の更新
@IBAction func imageTapped(_ sender: UITapGestureRecognizer) {
let imageView = sender.view as! UIImageView
let newImageView = UIImageView(image: imageView.image)
newImageView.frame = UIScreen.main.bounds
newImageView.backgroundColor = .black
newImageView.contentMode = .scaleAspectFit
newImageView.isUserInteractionEnabled = true
let tap = UITapGestureRecognizer(target: self, action: #selector(dismissFullscreenImage))
newImageView.addGestureRecognizer(tap)
self.view.addSubview(newImageView)
self.navigationController?.isNavigationBarHidden = true
self.tabBarController?.tabBar.isHidden = true
}
@objc func dismissFullscreenImage(_ sender: UITapGestureRecognizer) {
self.navigationController?.isNavigationBarHidden = false
self.tabBarController?.tabBar.isHidden = false
sender.view?.removeFromSuperview()
}