IOS CoreAnimation 에서 layer 애니메이션 이 깜빡 이 는 해결 방법
2172 단어 IOSCoreAnimationlayer깜박거리다
모든 애니메이션 이 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)
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
IOS에서 ReplayKit 및 RTC 사용 방법응용된 소리와 아나운서의 소리를 포함한다.이 두 가지 수요를 감안하여 우리는 스크린 공유를 하는 생방송에 필요한 미디어 흐름을 간단하게 분석할 수 있다. 만약 우리가 Audio App과 Audio Mic를 두 개의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.