작은 앱을 쓰려고하는데, 주 화면에서 나는 "거품"을 움직입니다. 이 애니메이션은 연속적이어야합니다. (화면에서 날아 오는 거품을 재사용) UI를 변경하는 모든 작업과 마찬가지로 애니메이션이 주 스레드에서 실행되어야한다고 들었습니다. 사실입니까? 이 스크린에 UIAlertView를 보여 주려고하면 연속 버블 애니메이션 때문에 애니메이션이 매우 담론 적으로 변합니다. (이것은 표시기가있는 사용자 정의 alertview입니다.) 장치는 iPhone 4이므로 정상적인 UIAlertView를 표시하는 것이 문제가 아닐 것이라고 생각합니다.연속 애니메이션이 적용되는 UClertView 애니메이션?
거품 애니메이션에 올바른 방법을 사용하고 있는지 물어보고 싶습니다. 먼저 NSTimer를 사용합니다. NSTimer는 매 0.01 초마다 startAnimation
메서드를 호출합니다 (컨트롤러의 viewDidAppear:
메서드에서 시작). startAnimation
메서드에서 처음에는 임의의 x 및 y 좌표 (화면에서 풍선을 viewdidappear 직후에 볼 수 있음)가있는 거품을 생성하고 임의의 x 및 y = 460 좌표로 거품을 생성합니다. startAnimation 메서드에서는 프레임 (frames)이라는 카운터를 실행하고이 카운터의 값이 35 일 때 거품 생성 메서드를 다시 호출합니다. I 배열에 발생하는 기포를 저장
, 다른 배열 (화면 떠난다)가 '사라'거품 :
문제. 먼저 배열을 없애면 버블을 재사용하려고 시도합니다. 배열이 다 떨어지면 새로운 버블이 생깁니다. 이 작업이 처리되는 동안 연속 애니메이션이 중지 된 다음 계속됩니다. 휴식 시간은 약 1 초이지만 이것은 매우 혼란 스럽습니다. 누구든지이 문제를 해결할 수 있습니까? 조언 감사는 머그잔 클래스에서
- (void)viewDidAppear { . timer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(startAnimation) userInfo:nil repeats:YES]; . } - (void)startAnimation { self.current = [NSDate timeIntervalSinceReferenceDate]; double diff = (self.start - self.current); if (diff < 0) { diff = (-1) * diff; } self.start = self.current; frames++; if (shouldMoveBubbles) { [mug moveBubbles:diff]; } if (frames == 35) { DebugLog(@"################################################################"); DebugLog(@"####################### FRAME = 35 ###########################"); DebugLog(@"################################################################"); [mug createNewBubbleOnTheBottomOfView:self.view]; frames = 0; } }
을 madik : - (void)moveBubbles:(double)millisElapsed {
for (Bubble *bubble in bubbles) {
int bubbleSpeed = bubble.speed;
float deltaX = (float)(bubbleSpeed * -degrees_sinus * millisElapsed * 100);
float deltaY = (float)(bubbleSpeed * -degrees_cosinus * millisElapsed);
DebugLog(@"movebubbles x: %f, y:%f, speed: %d, sin:%f, cos:%f", deltaX, deltaY, bubbleSpeed, degrees_sinus, degrees_cosinus);
[bubble moveBubbleX:deltaX Y:deltaY];
}
}
그리고 버블 클래스 :
- (void)moveBubbleX:(float)deltaX Y:(float)deltaY {
self.bubbleImage.center = CGPointMake(self.bubbleImage.center.x + deltaX, self.bubbleImage.center.y + deltaY);
}
이 상황에서 "담론 적"이란 무엇을 의미합니까? – Moshe
활동 표시기로 경고보기를 상상해보십시오. 그것을 보여 주려고 할 때 (버블 애니메이션 기억) 매우 느리게 표시됩니다. 활동 표시기의 애니메이션이 움직이지 않고 고정되어 있으며 경고보기를 닫을 때 매우 느리게 사라집니다. 따라서 전체 과정은 매우 느립니다. – madik
맞아. 메모리 문제 같아. 이 것을 하나의 것으로 분류하기 위해서'Build and Analyze'를 사용할 것을 제안합니다. – Moshe