2010-04-12 3 views
0

해결 방법을 모르는 큰 문제가 있습니다. 나는 스크롤 배경을 그려야하는 UIView를 가지고있다. NSTimer를 사용하여 초당 30 프레임을 업데이트하지만 8 초마다 한 프레임을 다시 그리는 것으로 보입니다. 나는 [self setNeedsDisplay]라고 부르고 있는데 효과가 없다. 왜 이런 일이 일어나는지 파악할 수 없으며 누군가에게 조언이 있습니까?UIView 드로잉 문제

감사합니다.

 
-(void) gameLoop: (id) sender 
{ 
    [myView updateAll]; 
    [myView setNeedsDisplay]; 
} 

MYVIEW가있는 UIView입니다 :

나는이 방법을 메시징 것
 
timer = [NSTimer scheduledTimerWithTimeInterval:0.0 
     target:self 
     selector:@selector(gameLoop:) 
     userInfo:nil 
     repeats:YES]; 

내 아래 applicationDidFinishLaunching 방법에 NSTimer 있습니다. UpdateAll은 드로잉을위한 코드를 업데이트합니다. 그것은 잘 작동, 문제는 drawRect 메서드가 너무 자주 실행되는 것으로 보인다. 초당 30 프레임을 실행하는 방법을 알아야합니다. 사람들이 내가해야 할 일은 위와 같지만 setNeedsDisplay는 8 초마다 호출된다는 것입니다.

도움 주셔서 감사합니다 ...

+0

관련 코드를 게시하십시오. –

답변

0

내 코드가 엄청나게 비효율적이었고 타이머가 느려지 게되었습니다. 비슷한 문제가있는 경우 drawRect를 실행하지 않는 것으로 가정하기 전에 몇 가지 간단한 드로잉 (예 : 초당 프레임 그리기)을 사용하여 drawRect를 테스트해야합니다. 보고 주셔서 감사합니다.

0

NSTimer를 사용하지 마십시오. 때문에 일반적인 실행 루프가 관리하는 다양한 입력 소스의 NS Timer reference

에서

는 타이머의 시간 간격의 유효 해상도는 50 ~ 100 밀리 초 정도의 제한됩니다.

저는 iPhone 전문가가 아니지만 원하는 업데이트 간격을 얻기 위해 플랫폼에서 애니메이션을 조사해야 할 수 있습니다.

1

보기를 다시 그려야 비싼 작업으로 인해 성능이 크게 저하됩니다. 대신, 이미지 뷰로 배경을 [UIView beginAnimation...을 사용하거나 CAAnimation을 사용하여 배경으로 이동시킬 수 있습니다.

+0

문제는이 방법으로해야한다는 것입니다. 그것은 다른 어플리케이션과의 성능 비교를위한 최종 어플리케이션이 아닙니다. – toc777

+0

글쎄, 네 비교가 끝난 것 같니? "끔찍한 성능"은 대부분의 경우 충분히 좋은 비교 인 것 같습니다.) –

+0

성능 비교를 위해 30fps를 업데이트 할 필요는 없지만 어쨌든 (표시하기 위해) 작동하도록하려면이 방법을 사용하고 싶습니다. 다른 기술에서 실행 중입니다. – toc777