То, что я пытаюсь достичь, это пропустить вызов firstDraw() во второй раз, когда вызывается drawRect. Причина в том, что в моем реальном коде у меня есть много точек данных и линий для рисования, поэтому я подумал, что если я переработаю ранее нарисованные вещи, я мог бы оптимизировать производительность. Возможно ли это вообще с CoreGraphics?
Я хотел бы быть в состоянии выполнить несколько рисунков на UIView без необходимости перерисовать то, что я уже сделал.
Приведенный ниже код выполнит два розыгрыша за раз в 2,4 секунды. После первого вызова я использую CGContextSaveGState, чтобы сохранить состояние. Во втором вызове я извлекаю текущий графический контекст, а затем добавляю некоторые строки. Однако это, похоже, терпит неудачу, поскольку кажется, что предыдущий контекст потерян.
Что я получаю:
Вот что я получаю в первого вызова отрисовки:
Вот что я получаю после второго вызова :
Это вместо того, чтобы то, что я хотел бы получить вместо после второго звонка:
Вот код:
import UIKit
class GraphView: UIView {
var count : Int = 0
override func drawRect(rect: CGRect) {
if (count == 0){
firstDraw()
NSTimer.scheduledTimerWithTimeInterval(2.4, target: self, selector: "setNeedsDisplay", userInfo: nil, repeats: false)
count++
}
else{
addLinesToDraw()
}
}
func firstDraw(){
// Drawing code
let context = UIGraphicsGetCurrentContext()
CGContextMoveToPoint(context, 50, 50);
CGContextSetRGBStrokeColor(context, 0, 0, 0, 1.0);
CGContextSetRGBFillColor(context, 0, 0.0, 0.0, 1.0);
CGContextAddLineToPoint(context, 60, 60);
CGContextMoveToPoint(context, 150, 150);
CGContextAddLineToPoint(context, 110, 90);
CGContextSetLineWidth(context, 2);
CGContextStrokePath(context);
// Draw a Point as a small square
CGContextSetRGBStrokeColor(context, 0.5, 0.5, 0.5, 1.0);
CGContextSetRGBFillColor(context, 0.5, 0.5, 0.5, 1.0);
//NSLog(@"Drawing rect at point [x: %i, y: %i]", xPosition+resolution, pressureIntValue);
CGContextFillRect(context, CGRectMake(0, 0, 10, 10));
CGContextAddRect(context, CGRectMake(0, 0, 10, 10));
CGContextStrokePath(context);
CGContextSaveGState(context)
}
func addLinesToDraw(){
// Drawing code
let context = UIGraphicsGetCurrentContext()
CGContextMoveToPoint(context, 30, 60);
CGContextSetRGBStrokeColor(context, 0, 0, 0, 1.0);
CGContextSetRGBFillColor(context, 0, 0.0, 0.0, 1.0);
CGContextAddLineToPoint(context, 20, 20);
CGContextMoveToPoint(context, 120, 250);
CGContextAddLineToPoint(context, 110, 90);
CGContextSetLineWidth(context, 2);
CGContextStrokePath(context);
// Draw a Point as a small square
CGContextSetRGBStrokeColor(context, 0.5, 0.5, 0.5, 1.0);
CGContextSetRGBFillColor(context, 0.5, 0.5, 0.5, 1.0);
//NSLog(@"Drawing rect at point [x: %i, y: %i]", xPosition+resolution, pressureIntValue);
CGContextFillRect(context, CGRectMake(20, 30, 10, 10));
CGContextAddRect(context, CGRectMake(20, 30, 10, 10));
CGContextStrokePath(context);
CGContextSaveGState(context)
}
}
Ok. То, что я пытаюсь достичь, это пропустить вызов firstDraw() во второй раз, когда вызывается drawRect. Причина в том, что в моем реальном коде у меня есть много точек данных и линий для рисования, поэтому я подумал, что если я переработаю ранее нарисованные вещи, я мог бы оптимизировать производительность. Возможно ли это вообще с CoreGraphics? – mm24