2017-08-12 91 views
6

Mój problem jest bardzo prosty. Chciałbym animować komórkę wewnątrz collectionView. Rzeczywiście, chciałbym pokazać szare tło za komórką i skalować obraz wewnątrz.Animacja komórki po naciśnięciu przy użyciu Swift 3

Byłoby (prawie) ten sam efekt niż Pinterest:

enter image description here

kiedyś kod, który animację na guziki, ale nigdy nie zrobił na komórce. Jak na przykład połączyć komórkę z akcją TouchUpInside lub TouchDown?

+1

Chciałbym lauch akcję kiedy lądować, a kiedy zwolnić dotykowy wewnątrz – KevinB

Odpowiedz

17

Jeśli chcesz rozpocząć animację po dotknięciu na komórce możesz wdrożyć didHighlightItemAt. Prawdopodobnie chcesz, aby odwrócić go w didUnhighlightItemAt:

override func collectionView(_ collectionView: UICollectionView, didHighlightItemAt indexPath: IndexPath) { 
    UIView.animate(withDuration: 0.5) { 
     if let cell = collectionView.cellForItem(at: indexPath) as? CustomCell {    
      cell.imageView.transform = .init(scaleX: 0.95, y: 0.95) 
      cell.contentView.backgroundColor = UIColor(red: 0.95, green: 0.95, blue: 0.95, alpha: 1) 
     } 
    } 
} 

override func collectionView(_ collectionView: UICollectionView, didUnhighlightItemAt indexPath: IndexPath) { 
    UIView.animate(withDuration: 0.5) { 
     if let cell = collectionView.cellForItem(at: indexPath) as? CustomCell { 
      cell.imageView.transform = .identity 
      cell.contentView.backgroundColor = .clear 
     } 
    } 
} 

że plony:

demo

+0

Cudowne! Właśnie tego chciałem !!! Dziękuję Ci bardzo ! – KevinB

0

Masz kilka opcji.

  • można zaimplementować widok kolekcja delegata metody collecdtionView(:didSelectItemAtIndexPath:) i umieścić tam swój kod.

  • Do widoku można dołączyć rozpoznawcę zatrzasku, który ma odpowiadać na dotknięcia.

  • Możesz utworzyć niestandardowy przycisk i zainstalować obraz, a następnie normalnie użyć metody IBAction przycisku.

0

Spróbuj tego:

W swoim zwyczajem UICollectionViewCell zmień imageViewtransform gdy wybrana komórka, czyli

class CollectionViewCell: UICollectionViewCell 
{ 
    @IBOutlet weak var imageView: UIImageView! 

    override var isSelected: Bool{ 
     didSet{ 
      UIView.animate(withDuration: 2.0) { 
       self.imageView.transform = self.isSelected ? CGAffineTransform(scaleX: 0.9, y: 0.9) : CGAffineTransform.identity 
      } 
     } 
    } 
}