Swift 카드 세탁 애니메이션 효과 실현 방법
1: 카드 만들기 대상
for _ in 0...49 {
let cardSet = UIImageView(image: UIImage(named: "cardBackLandscape"))
self.view.addSubview(cardSet)
cardSet.frame = self.landscapeCardBack.frame
self.cardSetList.append(cardSet)
}
NSNotificationCenter.defaultCenter().postNotificationName("setCreated", object: nil)
모든 카드를 UIImageView로 만듭니다. 나중에 이 카드를 조작하기 위해 저는 그룹으로 같은 위치에 있는 카드를 가지고 만듭니다. 만든후에 로컬 알림으로 setCreated 메시지를 보내서 이 페이지의 관찰자 카드set가 만듭니다. 두 번째 애니메이션을 시작할 수 있습니다.2: 우선 애니메이션을 시작하는 단추의 사용자 상호작용을 닫아야 합니다. 켜져 있으면 연속으로 클릭할 때마다 50장의 카드를 만들어서 프로그램이 끊기게 됩니다.
여기 delay Time은 라인을 지연시키는 거예요. 애니메이션이 어색하지 않게.
매번 아래 표시된 카드에 대응하는 대상에 회전 애니메이션을 추가하고 원점을 바꾼다. 나는 UIVIew 애니메이션으로 이 애니메이션을 실현하기 전에 각 카드에 베셀 곡선을 추가하려고 했다. 그러면 확실히 제어성이 높다. 그러나 시간 관계상 나는 UIVIew 애니메이션만 사용했다. 카드에 추가된 회전 애니메이션은 팝 애니메이션 라이브러리로 이루어졌다. 여기서 사용하는 것은 Basic 애니메이션이다.이 단계가 끝난 후에 모든 카드를 서로 다른 위치로 돌리고 흩어진다.delayTime이 끝나고 로컬 알림을 터치하여 shuffleFinished를 보낼 때 이 페이지의 관찰자는 다음 애니메이션을 실행한다. 즉, 모든 카드를 애니메이션의 시작점으로 복원하는 것이다
func shuffleTheSet() {
self.shuffleButton.userInteractionEnabled = false
let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(0.5 * Double(NSEC_PER_SEC)))
dispatch_after(delayTime, dispatch_get_main_queue()) {
NSNotificationCenter.defaultCenter().postNotificationName("shuffleFinished", object: nil)
}
for count in 0...49 {
UIView.animateWithDuration(0.3, animations: {
let cardRotateAnimation = POPBasicAnimation(propertyNamed: kPOPLayerRotation)
cardRotateAnimation.fromValue = 0
cardRotateAnimation.toValue = CGFloat(M_PI * 2.0)
cardRotateAnimation.duration = 1
// cardRotateAnimation.duration = Double(count>5 ? count/2 : count/10)
cardRotateAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)
self.cardSetList[count].layer.pop_addAnimation(cardRotateAnimation, forKey: "cardRotation")
self.cardSetList[count].frame.origin = CGPointMake(CGFloat(arc4random()) % (250 - 0 + 1) + 0, CGFloat(arc4random()) % (300 - 74 + 1) + 74)
self.view.layoutIfNeeded()
self.landscapeCardBack.removeFromSuperview()
})
}
}
3: 각 카드의 위치를 초기 위치로 복원하고 버튼의 타이틀을 카드 절단 상태로 설정합니다.
for count in 0...49 {
UIView.animateWithDuration(0.3, animations: {
self.cardSetList[count].center = self.landscapeCardBack.center
})
self.view.layoutIfNeeded()
}
self.shuffleButton.userInteractionEnabled = true
self.shuffleButton.setTitle("Cut Card", forState: .Normal)
카드를 씻은 후의 수요는 카드를 자르는 것이다. 시간 때문에 다음 주에 후속 애니메이션 효과를 계속 업데이트할 것이다.위에서 말한 것은 편집자가 여러분께 소개한 Swift 카드 세탁 애니메이션 효과의 실현 방법입니다. 여러분께 도움이 되었으면 합니다. 만약에 궁금한 것이 있으면 저에게 메시지를 남겨 주십시오. 편집자는 제때에 답장을 드리겠습니다.여기에서도 저희 사이트에 대한 지지에 감사드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
백그라운드에서 값을 계산하고 Swift 동시성 이후에 결과 사용값을 계산해야 하고 메인 스레드를 차단하지 않으려면 계산된 값을 반환하는 Swift Task 구조에서 해당 값을 계산하면 됩니다. Swift 동시성 이전에는 백그라운드 대기열로 이동하여 필요한 값을 계산하고 필요한 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.