web-dev-qa-db-ja.com

Swift-クリックすると画像を全画面表示し、再度クリックすると元のサイズにできますか?

私が作成しているアプリの場合、ユーザーが画像をクリックしてアプリで全画面表示できるようにする必要があります。そして、ユーザーは現在のフルスクリーン画像をクリックして元のサイズにできるようにします。

これは可能ですか?

私はXcodeの初心者であり、これを行う方法を知りたいと思っています。

29
Tessa

これは、画像をクリックしたときにフルスクリーン画像(縦横比を維持するための黒いバーを含む)を作成するコードです。

これを使用するには、画像を保持するViewControllerにこのコードを追加します。

次に、展開するimageViewについて、Attributes InspectoruserInteractionEnabledのボックスをオンにします、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()
}
84
vacawama