Является ли UIBezierPath лучшим способом создания подвижного скругленного прямоугольника?

#objective-c #cocoa-touch #rounded-corners #uibezierpath

#objective-c #cocoa-touch #закругленные углы #uibezierpath

Вопрос:

Я создаю UISlider с нуля. Я начал с создания скругленного прямоугольника, что я и сделал, используя приведенный ниже код:

 CGRect frame = CGRectMake(10, 10, self.frame.size.width, 10);

UIBezierPath* path = [UIBezierPath bezierPathWithRoundedRect:frame cornerRadius:10.0];
[[UIColor blueColor] setFill];
[path fill];
  

Я видел несколько других вариантов создания скругленного прямоугольника, но подумал, что это самый быстрый способ. Существуют ли какие-либо ограничения при создании с использованием UIBezierPath? А именно, ползунок должен иметь возможность перемещаться при касании событий, поэтому я хочу изменить свойство center для BezierPath. Возможно ли это?

Ответ №1:

Вам нужно будет либо воссоздавать путь Безье каждый раз, когда вам нужно изменить положение ползунка, либо использовать матрицу преобразования CGContext, чтобы нарисовать его в другом месте.

Я предлагаю вам рассмотреть использование CALayer для движущейся части слайдера. Нарисуйте канал ползунка в view.layer и добавьте подслой, в котором вы рисуете «большой палец» ползунка. Тогда вы можете просто изменить положение слоя thumb, когда вам нужно его переместить.

Комментарии:

1. Спасибо. Если я вместо этого использую CGRect, мне все равно придется перерисовывать прямоугольник или преобразовывать его каждый раз?

2. извините, я понял, что это было расплывчатое описание. Я имел в виду использование таких методов, как CGContextMoveToPoint и CGContextAddArcToPoint

3. Извините, я не знаю, как это называется

4. Да, вам приходится каждый раз трансформировать и перерисовывать прямоугольник.