2016-12-19 1 views
1

collectionview은 전체 화면이 cells이고, 하나씩 자동 스크롤됩니다. 내 셀 안의 imageView에 애니메이션을 추가하고 싶습니다. 하지만 자동 스크롤이 끝난 후에 애니메이션을 시작하고 싶습니다. 아래 코드를 시도했지만 첫 번째 셀에서만 작동합니다.콜렉션 뷰 셀이 보이기 시작한 후에 이미지보기 애니메이션하기

이 줄의 애니메이션 기능을 호출합니다. cell.alpImage.getBiggerAnim(). 하지만 전에 말했듯이, 그것은 첫 번째 셀에서만 작동합니다. 이건 내 애니메이션 확장

func scrollToNextCell(){ 
    let cellSize = CGSize(width: self.view.frame.width, height: self.view.frame.height) 
    let contentOffset = myCollectionView.contentOffset 
    width: cellSize.width, height: cellSize.height), animated: true) 
    alphabetSoundPlay() 
} 
var myTimer: Timer? 
func startTimer() { 
    myTimer = Timer.scheduledTimer(timeInterval: 3.0, 
            target: self, 
            selector: #selector(scrollToNextCell), 
            userInfo: nil, 
            repeats: true) 
} 

입니다 :

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    let cell = myCollectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! AlphabetCollectionViewCell 

    if (indexPath.item >= alpImageArray.count - 1) { 
     cell.alpImage.isHidden = true 
     cell.startAgain.isHidden = false 
     cell.readyLabel.isHidden = true 
     cell.startAgain.addTarget(self, action: #selector(startAgainPressed), for: .touchUpInside) 
    } else if (indexPath.item == 0) { 
     cell.readyLabel.isHidden = false 
     cell.alpImage.isHidden = true 
    } else { 
     cell.startAgain.isHidden = true 
     cell.readyLabel.isHidden = true 
     cell.alpImage.isHidden = false 
     cell.alpImage.image = UIImage(named: alpImageArray[indexPath.row] + ".png") 
    } 
    cell.alpImage.getBiggerAnim() 
    return cell 
} 

자동 스크롤 관리하는 기능입니다

extension UIView { 
    func getBiggerAnim() { 
     UIView.animate(withDuration: 0.6 , animations: { 
      self.transform = CGAffineTransform(scaleX: 0.6, y: 0.6) 
     },completion: { finish in 
      UIView.animate(withDuration: 0.6){ 
       self.transform = CGAffineTransform.identity 
      } 
     }) 
    } 
} 
+2

'cel에서 애니메이션 메소드를 호출하면 안됩니다. lForItem'을 호출하면 스크롤이 끝나기 전에 호출됩니다. UIScrollViewDelegate의'scrollViewDidEndDecelerating' 콜백에서 호출 할 수 있습니다. 어떤 셀을 볼 수 있는지 알아야합니다. – ovejka

+0

메인 스레드에서'getBiggerAnim' 호출을 시도 했습니까? –

답변

0

당신이 뭔가를 사용해야을 ..

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { 
    for cell: UICollectionViewCell in self.myCollectionView.visibleCells { 
    var indexPath = self.myCollectionView.indexPath(for: cell)! 
    let acell = myCollectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! AlphabetCollectionViewCell 

    print("\(indexPath)") 
    acell.alpImage.getBiggerAnim() 
    } 
} 
+0

저는 언어가 아닌 해결책에 더 집중해야한다고 생각합니다. 그러나 나는 Swift에서 나의 대답을 바꾸었다. .. 고마워! –

+0

답변 해 주셔서 감사합니다. 내가 이것을 시도하면이 줄에 오류가 발생합니다. 'cell.alpImage.getBiggerAnim()'그것은'alpImage'에 접근하게하지 않았습니다. UICollectionViewCell을 AlphabetCollectionViewCell로 대체하려고했지만 그것도 작동하지 않았습니다 – Volkan

+0

업데이트 된 답변을 확인하십시오. –