문제

작은 런 속도 문제가 있습니다. 부하시, 나는 최소 1000 점을 포함하는 cgmutable 경로를 생성합니다. 화면 에서이 경로를 스크롤하고 싶습니다. 따라서 이런 종류의 코드를 사용합니다.

-(void) drawRect:(CGRect)rect {

    /*
    Here, I have a timer calling drawRect 60 times per second.
    There's also code for the scale and currentTime, based on
    an MP3 playback (AVAudioPlayer);
    */

    CGContextRef ref = UIGraphicsGetCurrentContext();   
    CGContextClearRect(ref, [self frame]);

    CGContextSaveGState(ref);
    CGContextTranslateCTM(ref, s.width/2+currentTime, 1);
    CGContextScaleCTM(ref, scale, 1);
    CGContextAddPath(ref, myGraphPath);
    CGContextSetRGBFillColor(ref, .1, .1, .1, .8);
    CGContextFillPath(ref);
    CGContextRestoreGState(ref);
}

문제는 조금 느리지 만 그리 많지 않지만 그래픽 코드를 훨씬 더 추가해야하므로 장치가 전체 경로를 그리는지 궁금했습니다 (스케일이 적용되면 경로는 경로가 약 10.000 픽셀 너비) 또는 화면에서 볼 수있는 부품? 이것을 최적화하기 위해 무엇을 할 수 있습니까?

도움이 되었습니까?

해결책 2

많은 1000 포인트 경로를 더 작은 10 포인트 경로 등으로 나누는 것과 같이 많은 것을 시도한 후 간단한 정점 배열을 사용하여 모든 것을 OpenGL로 포팅했습니다. 모든 것을 포트하는 데 약 4 시간이 걸렸습니다 (경로 확장, 스크롤 등). 이제 28에서 28 개만 22fps 만 사용했을 때 항상 전체 60fps 애니메이션을 얻었습니다. Coregraphics.

다른 팁

초당 1,000 포인트 또는 10,000 포인트 경로를 60 회 60 번 그리면 실제로 가능하다면 응용 프로그램이 느려질 것입니다. 경로가 정적 인 경우, UIView 내에서 한 번만 그려서 UIView의 레이어 내에 캐시되고 주위의 레이어를 애니메이션하는 것을 실제로보아야합니다. 그것은 애니메이션을해야하며, 새로운 Cashapelayer를 볼 수 있습니다. 이는 단순히 애니메이션을 경로 속성에 적용하여 베 지어 경로를 애니메이션 할 수있는 능력을 제공합니다.

그러나 10,000 픽셀은 iPhone (2048 x 2048)의 최대 텍스처 크기보다 넓으므로 표준보기 또는 레이어에서이를 표시하는 데 문제가 있으므로 작은 청크로 분해하거나 CatileDlayer를 사용해야합니다. 화면으로 렌더링합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top