2016-01-09 20 views
10

私が作っているアプリでは、ユーザーが画像をクリックしてアプリで全画面表示できるようにしたい。そして、ユーザーは今フルスクリーンイメージをクリックして元のサイズにすることができるようになります。スウィフト - クリックすると画像をフルスクリーンで表示し、もう一度クリックすると元のサイズにするにはどうすればいいですか?

これは可能ですか?

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

答えて

49

画像がクリックされたときにフルスクリーンイメージ(アスペクト比を維持するための黒い棒)を作成するコードです。

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

その後、あなたは、拡大のためのボックスをチェックしたいあなたImageViewのためを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を持っていて、フルスクリーンイメージをスーパービューから削除します(したがって、元のスクリーンを覆い隠します)。


スウィフト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() 
} 
+1

テーブルビューセル内の画像ビューのために、この作業を行います? – WoShiNiBaBa

+0

@WoShiNiBaBa、なぜそうは見えないのですか?あなたのセルの 'UIImageView'には** userInteractionEnabled **を設定し、' cellForRowAt'には 'UITapGestureRecognizer'をプログラムで追加する必要があります。 – vacawama

+0

コードを画像にどのように接続しますか? –

関連する問題