Ответ 1
UIGraphicsGetCurrentContext()
возвращает ссылку на текущий графический контекст. Это не создает. Это важно помнить, потому что если вы посмотрите на него в этом свете, вы увидите, что ему не нужен параметр размера, потому что текущий контекст - это просто размер, с которым был создан графический контекст.
UIGraphicsBeginImageContext(aSize)
предназначен для создания графических контекстов на уровне UIKit за пределами метода UIView drawRect:
.
Здесь вы можете использовать их.
Если у вас есть подкласс UIView, вы можете переопределить его метод drawRect: так:
- (void)drawRect:(CGRect)rect
{
//the graphics context was created for you by UIView
//you can now perform your custom drawing below
//this gets you the current graphic context
CGContextRef ctx = UIGraphicsGetCurrentContext();
//set the fill color to blue
CGContextSetFillColorWithColor(ctx, [UIColor blueColor].CGColor);
//fill your custom view with a blue rect
CGContextFillRect(ctx, rect);
}
В этом случае вам не нужно было создавать графический контекст. Он был создан для вас автоматически и позволяет выполнять собственный рисунок в методе drawRect:
Теперь, в другой ситуации, вы можете выполнить какой-то пользовательский чертеж вне метода drawRect:. Здесь вы можете использовать UIGraphicsBeginImageContext(aSize)
Вы можете сделать что-то вроде этого:
UIBezierPath *circle = [UIBezierPath
bezierPathWithOvalInRect:CGRectMake(0, 0, 200, 200)];
UIGraphicsBeginImageContext(CGSizeMake(200, 200));
//this gets the graphic context
CGContextRef context = UIGraphicsGetCurrentContext();
//you can stroke and/or fill
CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
CGContextSetFillColorWithColor(context, [UIColor lightGrayColor].CGColor);
[circle fill];
[circle stroke];
//now get the image from the context
UIImage *bezierImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageView *bezierImageView = [[UIImageView alloc]initWithImage:bezierImage];
Надеюсь, это поможет вам разобраться. Кроме того, вы должны использовать UIGraphicsBeginImageContextWithOptions (размер, непрозрачность, масштаб). Для дальнейшего объяснения пользовательского чертежа с графическими контекстами см. Мой ответ здесь