Рисование изображения UIButton через CGContext - PullRequest
0 голосов
/ 11 июня 2018

Чтобы отобразить на кнопке круг выполнения, я рисую дугу в CGContext, затем передаю ее в UIImage и, наконец, в UIButton изображение.Однако все, что он рисует, это заполненный квадрат:

CGRect rect = CGRectMake(0, 0, myButton.frame.size.width, myButton.frame.size.height);

UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0);
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(ctx, 1);
[[UIColor colorWithRed:1.0 green:0. blue:0. alpha:1.0] setStroke];
[[UIColor colorWithWhite:0.9 alpha:1.0] setFill];
CGContextMoveToPoint(ctx, rect.size.width/2., rect.size.height/2.);
CGContextAddArc(ctx,
                rect.size.width/2., // centerX
                rect.size.height/2.,  // centerY
                rect.size.width, // radius
                0, // start Angle
                M_PI/2., // end Angle
                1); // clockwise
CGContextDrawPath(ctx,kCGPathFillStroke);

UIImage *progressImg=UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[myButton setImage:progressImg forState:UIControlStateNormal];

Почему я получаю заполненный квадрат, а не заполненную частичную дугу?Это лучший способ нарисовать индикатор в виде круга?

1 Ответ

0 голосов
/ 11 июня 2018

Ваш радиус дуги неправильный.Фактическая дуга рисуется далеко за пределами вашего контекста.Измените

CGContextAddArc(ctx,
                rect.size.width/2., // centerX
                rect.size.height/2.,  // centerY
                rect.size.width, // radius
                0, // start Angle
                M_PI/2., // end Angle
                1); // clockwise

на

CGContextAddArc(ctx,
                rect.size.width/2., // centerX
                rect.size.height/2.,  // centerY
                rect.size.width/2., // radius
                0, // start Angle
                M_PI/2., // end Angle
                1); // clockwise

Также обратите внимание, что в зависимости от типа кнопки вы можете получить изображение, обработанное как шаблон , а не какфактическое изображение, которое вы нарисовали.Чтобы это исправить, вы бы сказали (перед использованием изображения в кнопке):

progressImg = 
    [progressImg imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
...