2016-10-06 13 views
0

私はUITableViewCellを持っています。 このtableviewcellには、UIImageViewがあります。アニメーション中にUITableViewCell子UIImageViewを前面に表示する

イメージを押すと、UIImageViewにCGAffineTransformを適用します。

問題:セルの他の項目が画像の上にあり、アニメーションが発生したときにそれらを背面に表示します。

私はのようなものを試してみました:

//In the UITableViewCell 

override func didMoveToWindow() { 
    super.didMoveToWindow() 

    superview?.superview?.bringSubview(toFront: photoView) 
    } 

が、それは動作しません。

私もやってみました:

photoView.layer.zLocation = 10 

が、それはどちらか動作しません。

let scaleTransform = CGAffineTransform(scaleX: scale, y: scale) 
photoView.transform = scaleTransform 

任意のアイデア:思っていたものについては

、変換コードは次のようになりますか?

+0

多分これは? cell.contentView.bringSubviewToFront(photoView) – koropok

+0

xibの他のビューの上にイメージビューを保持するようにしてください。 –

+0

contentView.bringSubview(toFront :)は機能しません。 @SachinAmrale、私はautolayoutをプログラムで使用していますが、それはできません。ここでの問題は、現在のセルが他のすべてのセルの上にあるかどうかわからないことです。 – Mikael

答えて

1

私は、これはあなたが望むものである間違えていないよ場合:

は、他の細胞のsubviews-の -onトップあなたが設定する必要があることを意味し、「私は、私は、画像を押したときにUIImageViewにCGAffineTransformを適用したいです」 ImageViewのためUITapGestureRecognizer

あなたUITableViewCellのようになります。

// your custom cell, in my case I'm calling it "TableViewCell" 
class TableViewCell: UITableViewCell { 
    @IBOutlet weak var imgView: UIImageView! 
    // your other IBOutlets... 

    //... 

    // this flag is useful when you want to check if the imageView is tapped, you should return it to its normal transform -for example- 
    private var isImageViewMovedToFront = false 

    override func didMoveToWindow() { 

     // adding the tap gesture 
     let tapGesture = UITapGestureRecognizer(target: self, action: #selector(TableViewCell.imgViewTapped)) 
     imgView.isUserInteractionEnabled = true 
     imgView.addGestureRecognizer(tapGesture) 

    } 

    func imgViewTapped() { 
     if isImageViewMovedToFront == false { 
      isImageViewMovedToFront = true 

      contentView.bringSubview(toFront: imgView) 
      UIView.animate(withDuration: 0.25) { 
       let scaleTransform = CGAffineTransform(scaleX: 1.2, y: 1.2) 
       self.imgView.transform = scaleTransform 
      } 
     } else { 
      isImageViewMovedToFront = false 

      contentView.sendSubview(toBack: imgView) 
      UIView.animate(withDuration: 0.25) { 
       let scaleTransform = CGAffineTransform(scaleX: 1.0, y: 1.0) 
       self.imgView.transform = scaleTransform 
      } 
     } 

    } 
} 

出力すべき次のようになります。

  • 最初の打ち上げ:

    enter image description here

    はセルをタップ:

enter image description here

  • retappingをそれに:
  • 01助け

enter image description here

希望。

+0

そのような助けのはい。私はすでにジェスチャーのコードをすべて持っていますが、私の問題はbringSubview toFrontです。たとえば、別のセルがあり、その画像がその次のセルを越えている場合(画像を現在のセルよりも大きくするようなスケールでスケールするとします)、画像の上に他の要素を置くことができます。 CGAffineTransform.identity – Mikael

+0

基本的に、Instagramピンチに似たようなことをしてポストイメージをズームしようとしています。このレイアウトの問題をどのように解決するのか分かりません。 – Mikael

関連する問題