회전하는 본문 애니메이션이있는 iOS 앱을 사용하고 있습니다. 일련의 UIImages는 NSArray에 저장되고 변수는 현재 이미지의 인덱스를 추적합니다.UIImage의 반복 업데이트가 화면에 표시되지 않습니다.
다음 방법은 지금까지 내가 터치 이벤트에 대한 응답으로 방법이라고 한 개까지있는 UIImageView
- (void)renewImage{
[rotatingBody.image release];
rotatingBody.image = [[UIImage alloc] initWithContentsOfFile:[currentPerson.imageArray objectAtIndex:pictureIndex]];
}
를 업데이트합니다. touch 이벤트에서 새 pictureIndex를 계산 한 다음 [self renewImage]를 호출합니다. 그것은 완벽하게 작동합니다.
그러나 애니메이션에 운동량을 추가하고 싶습니다. 바로 다음 이미지를 계산하는 대신 속도를 계산합니다. 속도 변수를 사용하여 pictureIndex를 업데이트하고 속도를 줄이면 결국 [self renewImage]를 호출하기 위해 별도의 스레드에 루프를 만들 계획입니다.
문제를 입력 I 화면이 될 때까지 갱신되지 (루프 예 또는 단지 두번 수면의 일종으로 구분)과 같은 기능으로 일렬로 더 다음 번 [renewImage 자기] 호출마다마지막 전화 후에. 그것은 마치 renewImage 메서드가 방문되었음을 확신하더라도 (추적 덕분에) 장치 (또는 컴파일러)가 첫 번째 업데이트를 합리화하는 것처럼 보입니다. 여기
는 작동하지 않는 몇 가지 테스트 코드 :이while (velocity > 0) {
pictureIndex++;
pictureIndex = pictureIndex % [self getNumberOfImages];
if (pictureIndex < 0)
{
pictureIndex += [self getNumberOfImages];
}
velocity -= 20;
NSLog(@"velocity: %f", velocity);
[self renewImage];
[NSThread sleepForTimeInterval:0.5];
}
을 둘 다 수행합니다
pictureIndex += 20;
[self renewImage];
sleep(1);
pictureIndex += 20;
[self renewImage];
어떤 생각을?
효과가있었습니다. 고맙습니다! 왜 빨리 대충 설명할까요? (그리고, 네, 알아야 할 것은 문서화되어 있어야한다는 것을 알고 있습니다.) – Jonatan
알고있는 한 UI에 대한 모든 변경은 주 스레드/실행 루프에서 수행되어야합니다. –