2013-10-10 2 views
0

В настоящее время я работаю над проектом, который позволяет рисовать с помощью штрихов в прокрутке. Единственная проблема заключается в том, что она не позволяет мне рисовать до нижней части scrollview. Я думаю, что это имеет какое-то отношение к UIGraphicsgetCurrentContext(). Любая помощь будет потрясающей! Вот что я до сих порРисование в UIScrollView

- (void)drawRect:(CGRect)rect { 
    //Here 
    UIGraphicsBeginImageContextWithOptions(CGSizeMake(1630, 2400), YES, 5); 
    __block CGContextRef context = UIGraphicsGetCurrentContext(); 
    //CGContextAddRect(context, CGRectMake(0, 0, 1024, 1620)); 
    //[contentView.layer renderInContext:context]; 
    CGContextSaveGState(context); 
    CGContextSetStrokeColorWithColor(context, [[UIColor blackColor] CGColor]); 
    CGContextSetLineWidth(context, 4.0f); 
    CGContextSetLineCap(context, kCGLineCapRound); 
    CGContextSetLineJoin(context, kCGLineJoinRound); 
    [[ProblemStore sharedProblemStore] mapCurrentSolutionStrokes:^(SolutionStroke *stroke, NSUInteger strokeNum) { 
     [self drawStroke:stroke inContext:context]; 
    }]; 
    CGContextRestoreGState(context); 
    UIGraphicsEndImageContext(); 
} 
+0

Не могли бы вы разместить снимок экрана? – Coder404

ответ

0

Если это drawRect метода для некоторых UIView подкласса, вы можете упростить:

- (void)drawRect:(CGRect)rect { 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetStrokeColorWithColor(context, [[UIColor blackColor] CGColor]); 
    CGContextSetLineWidth(context, 4.0f); 
    CGContextSetLineCap(context, kCGLineCapRound); 
    CGContextSetLineJoin(context, kCGLineJoinRound); 
    [[ProblemStore sharedProblemStore] mapCurrentSolutionStrokes:^(SolutionStroke *stroke, NSUInteger strokeNum) { 
     [self drawStroke:stroke inContext:context]; 
    }]; 
} 

Вы обычно используете UIGraphicsBeginImageContextWithOptions, когда вы хотите, чтобы сделать некоторые просмотр и извлечение изображение с UIGraphicsGetImageFromCurrentImageContext, но вы обычно не используете UIGraphicsBeginImageContextWithOptions в своем собственном представлении drawRect. Я бы отделил функциональность drawRect от логики экономии изображения (при условии, что вам даже нужно/нужно последнее).

Таким образом, я лично создаю пользовательский вид соответствующего размера (например, 1,630 x 2,400), добавит его в список прокрутки и воспользуюсь приведенным выше как drawRect для этого пользовательского представления.

С точки зрения того, почему ваше исполнение не сводится к нижней части прокрутки, я подозреваю, что это связано с вашим выбором scale из 5 для вашего UIGraphicsBeginImageContextWithOptions. Обычно вы используете 1 (не сетчатка), 2 (сетчатка), или 0 (используйте масштаб от главного экрана).

В качестве альтернативы вам не нужен определитель __block для вашего CGContextRef. Вы можете получить доступ к переменной context без нее.

Смежные вопросы