IOS CoreAnimation 에서 layer 애니메이션 이 깜빡 이 는 해결 방법

인터넷 에 Core Animation 레이 어 애니메이션 의 예 가 있 습 니 다.view 의 구름 을 왼쪽 에서 오른쪽으로 이동 시 켜 화면 을 옮 길 때 까지 구름 을 맨 왼쪽 으로 옮 긴 다음 에 애니메이션 을 반복 합 니 다.
모든 애니메이션 이 layer 에서 완성 되 었 습 니 다.그런데 작은 문제 가 있 습 니 다.첫 번 째 클 라 우 드 애니메이션 이 완 성 될 때 제자리 에 반 짝 이 는 부분 이 있어 야 화면의 맨 오른쪽 끝 으로 이동 할 수 있 습 니 다.그 다음 에 운동 애니메이션 은 이런 문제 가 없습니다.

gif 파일 을 녹음 할 때 사용 하 는 프레임 율 이 낮 기 때문에 위의 그림 에서 이 문 제 를 보 여주 기 가 어렵 습 니 다.그러나 실제 App 이 실 행 될 때 모든 구름 은 화면 을 처음 옮 길 때 초기 위치 에서 반 짝 이 며 다음 애니메이션 을 실행 합 니 다.왜 일 까요?
layer 애니메이션 은 view 차원 의 애니메이션 과 다 르 기 때문에 원본 view 의 모든 속성 을 수정 하지 않 습 니 다.구름 으로 이동 하 는 애니메이션 의 경우 구름의 x 좌 표를 바 꾸 어 오른쪽으로 이동 하 게 하 는 것 처럼 보이 지만 실제 구름 ImageView 는 제자리 에 있 습 니 다.CA 는 그 외관 으로 임시 그림 을 만들어 이동 할 뿐 원래 의 구름 은 잠시 숨 어 있 습 니 다.이동 애니메이션 이 완료 되면 이 임시 대상 이 삭제 되 고 원래 의 구름 이 초기 위치 에 나타 납 니 다.
그럼 왜 애니메이션 만 처음으로 반 짝 거 리 는 거 죠?첫 번 째 애니메이션 이 끝 난 후에 저 는 코드 에서 구름 view 의 x 좌 표를 수 정 했 기 때문에 뒤의 구름 x 좌 표 는 모두 layer 애니메이션 의 from Value 와 같 기 때문에 후속 애니메이션 이'반 짝 임'이 발생 하지 않도록 할 것 입 니 다.
이 유 를 알 면 해결 이 간단 합 니 다.저 는 첫 번 째 애니메이션 전에 구름의 x 좌 표를 지정 한 위치 로 바 꾸 고 from Value 의 값 을 초기 위치 로 조정 하면 됩 니 다.

func animateCloud(layer:CALayer){
 let cloudSpeed = 15.0/Double(view.layer.frame.size.width)
 let duration:NSTimeInterval = Double(view.layer.frame.size.width - layer.frame.origin.x) * cloudSpeed
 //      layer      
 let fromValue = layer.position
 //         
 layer.position.x = -layer.bounds.width/2

 let cloudMove = CABasicAnimation(keyPath: "position.x")
 cloudMove.fillMode = kCAFillModeForwards
 //cloudMove.removedOnCompletion = false
 cloudMove.duration = duration
 //         
 cloudMove.fromValue = fromValue.x
 cloudMove.toValue = self.view.bounds.size.width + layer.bounds.width/2
 cloudMove.delegate = self
 cloudMove.setValue("cloud", forKey: "name")
 cloudMove.setValue(layer, forKey: "layer")
 layer.addAnimation(cloudMove, forKey: nil)
 }
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기