일련의 이미지에서 팬하는 제스처가 있습니다. 특정 시간 동안 패닝 한 후에이 메모리를 올바르게 관리하는 방법이 확실하지 않아 충돌이 발생합니다.이미지로드시 메모리 관리
animImage는 UIImageView입니다. 여기
그것이 작동하는 방법이다 :
- (IBAction) panAnim:(UIPanGestureRecognizer *)sender{
CGPoint translate = [sender translationInView:sliderView];
if (translate.x >= lastPoint) {
difference = translate.x - lastPoint;
[self forwardAnim:difference];
} else {
difference = lastPoint - translate.x;
[self backwardAnim:difference];
}
lastPoint = translate.x;
}
-(void)forwardAnim:(CGFloat)speed{
NSInteger newFrame = currentFrame+speed;
currentFrame = newFrame;
if (currentFrame>=totalFrames) {
currentFrame=0;
}
NSString *newImagePath = [NSString stringWithFormat:@"%@", [currentAnimation objectAtIndex:currentFrame]];
animImage.image = [UIImage imageNamed:newImagePath];
}
-(void)backwardAnim:(CGFloat)speed{
NSInteger newFrame = currentFrame-speed;
currentFrame = newFrame;
if (currentFrame<0) {
currentFrame=(totalFrames-1);
}
NSString *newImagePath = [NSString stringWithFormat:@"%@", [currentAnimation objectAtIndex:currentFrame]];
animImage.image = [UIImage imageNamed:newImagePath];
}
애니메이션은 번역의 위치를 감지하고 무엇을 '프레임'애니메이션에 있어야 계산 한 다음 이미지를 바꿉니다.
나는 매우 부드러운 애니메이션을 얻고 있지만 분명히 메모리를 올바르게 관리하지 않기 때문에 충돌이 발생합니다. 메모리 경고가 발생하고 충돌이 발생하지만 이미지를 한동안 스크롤했을 때만 오류가 발생합니다.
한 번에 100 개의 이미지를 미리로드하는 방법을 알아야하므로 100 개의 이미지 만 저장할 수 있습니다. 인스트루먼트의 IO 출력에서 이미지가 제대로 열리고 닫히기 때문에 이상합니다.
도움 주셔서 감사합니다.
건배, D
animImage는 UIImageView입니까? 언뜻보기에 currentAnimation의 색인 문제 이외의 다른 코드를 보지 못했습니다. 스택 트레이스를 얻었습니까? – csano
예 animImage는 UIImageView입니다. 이 코드가 괜찮 으면 충돌의 원인이 다른 곳에서 발생했을 수 있습니다. 조사 할게. 건배 –
@ j0k 문제의 원인이 메모리 부족 경고이며 충돌합니다. 애니메이션 때문입니다. –