#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. Да, вам приходится каждый раз трансформировать и перерисовывать прямоугольник.