2013-06-20 4 views
0

데이터 스트림을 받아서 표시하는 그래프 응용 프로그램에서 작업하고 있습니다. UIView (Core Graphics)에서 많은 선분을 그리는 것은 매우 느립니다. 새로운 데이터가있는 화면의 일부분 만 그리면 속도를 높이려고합니다.업데이트 할 UIView 부분을 제어하는 ​​방법 (iOS/Xamarin) - 화면이 완전히 지워지지 않게해야합니다.

나는 현재 창 내 UIView의 개체입니다 (자 마린/monotouch 사용) 화면

 NSTimer.CreateRepeatingScheduledTimer (TimeSpan.FromSeconds (0.1), delegate { 
      pane.SetNeedsDisplay(); 
     }); 

다시 그리기이 기능을 사용합니다. pane 객체는 화면의 어떤 부분을 다시 그려야하는지 알 수 있습니다. 나는 다시 그리기 위해 화면 영역을 지정하는 또 다른 방법이 있다고 생각합니다. 아니면 다른 해결책?

또한 코드는 그리드 세트를 그립니다. 결코 변하지 않습니다. 내가 그것을 배경에 추가 할 수 있도록 그들을 어떤 레이어 또는 다른 것으로 저장하는 방법이 있습니까?

그리기 선이 좋지 않아 보이지만 모양을 제대로 보이게하기 위해 많은 추가 코드를 구현해야하지만 대안은 OpenGL과 함께하는 것입니다.

감사합니다.

답변

2

그래프 데이터의 경우 CoreGraphics를 직접 사용하여 UIView 하위 클래스 'drawRect: 메소드의 행을 렌더링해야합니다. 메서드가 CGRect 인수와 겹치는 데이터 만 다시 그려지는지 확인하십시오. 메서드 setNeedsDisplay은 전체 UIView에 다시 그리기가 필요하다고 표시하므로 그래프 데이터가 변경 될 때이를 사용하는 대신 setNeedsDisplayInRect: 메서드를 사용하여 drawRect:을 호출 할 UIView의 해당 영역에 새로운 데이터가 있음을 나타내야합니다. 해당 부분 만 다시 그릴 것입니다 (구현 한 경우).

배경 그리드에 대해서는 그래프를 그릴 UIImage를 UIImage로 표시 한 다음 뷰 뒤에 UIImage를 표시 할 수 있습니다. UIGraphicsBeginImageContext, CALayer renderInContext:, UIGraphicsGetImageFromCurrentImageContextUIGraphicsEndImageContext에 대한 설명서를보고 싶을 것입니다.

void SetNeedsDisplayInRect (RectangleF rect); 

지정된 영역이 다시 그려 요청할 경우에만됩니다

+0

내 UIView에 투명 배경이 있음을 어떻게 든 지정해야합니까? – reza

+0

예, UIImageView가 표시됩니다. 'drawInRect :'메소드에서'[super drawInRect : rect];'를 호출하고 UIView의 배경색을'[UIColor clearColor];로 초기화하여 초기화 할 수 있어야합니다. 불투명 BOOL 속성을 false로 설정해야 할 수도 있습니다. – Idles

1

은이 변종을 사용할 수 있습니다.