#ios #objective-c #uiview #uibezierpath #cashapelayer
#iOS #objective-c #uiview #uibezierpath #cashapelayer
Вопрос:
Я пытаюсь рисовать только углы в кадре ImageView. Для этого я использовал CAShapeLayer и путь Безье и отлично работал с пунктирными линиями вокруг фрейма UIImageView. Но требование — это нечто большее, нужно показывать только углы. То, что я пробовал до сих пор, это,
@property (strong, nonatomic)CAShapeLayer *border;
_border = [CAShapeLayer layer];
_border.strokeColor = [UIColor colorWithRed:67/255.0f green:37/255.0f blue:83/255.0f alpha:1].CGColor;
_border.fillColor = nil;
_border.lineDashPattern = @[@40, @50];
[pImageView.layer addSublayer:_border];
_border.path = [UIBezierPath bezierPathWithRect:pImageView.bounds].CGPath;
_border.frame = pImageView.bounds;
Я использовал другой lineDashPattern, но не смог получить результат, так как не нашел надлежащей документации для lineDashPattern. Как он рисует и все такое.
Любая помощь будет полезна
Я хочу что-то вроде этого
Комментарии:
1. Какова ваша цель в этом кадре? если это изменение размера изображения, проверьте github.com/yackle/CLImageEditor наличие хорошего контроля для изменения размера изображения
2. Почему бы не использовать Quartz2D для рисования углов в CALayer.
3. @KudoCC можете ли вы объяснить, как?
4. проверьте ответ ниже @SahebSingh
Ответ №1:
Используйте приведенный ниже код, работающий для меня:
//1. For imageView Border
CAShapeLayer *shapeLayer = [CAShapeLayer layer];
shapeLayer.path =[UIBezierPath bezierPathWithRect:_imgView.bounds].CGPath;
shapeLayer.strokeColor = [UIColor redColor].CGColor; //etc...
shapeLayer.lineWidth = 2.0; //etc...
shapeLayer.position = CGPointMake(0, 0); //etc...
[_imgView.layer addSublayer:shapeLayer];
//2. For Outside Corner
float cWidth=30.0;
float cSpace=_imgView.frame.size.width 20-(2*cWidth);
NSNumber *cornerWidth=[NSNumber numberWithFloat:cWidth];
NSNumber *cornerSpace=[NSNumber numberWithFloat:cSpace];
CAShapeLayer *_border = [CAShapeLayer layer];
_border.strokeColor = [UIColor blackColor].CGColor;
_border.fillColor = nil;
_border.lineWidth=2.0;
//imageView frame is (width=240,height=240) and 30 200 30=260 -->10 pixel outside imageView
_border.lineDashPattern = @[cornerWidth,cornerSpace,cornerWidth,@0,cornerWidth,cornerSpace,cornerWidth,@0,cornerWidth,cornerSpace,cornerWidth,@0,cornerWidth,cornerSpace,cornerWidth];
_border.path = [UIBezierPath bezierPathWithRect:CGRectMake(-10, -10, _imgView.frame.size.width 20, _imgView.frame.size.height 20)].CGPath;
[_imgView.layer addSublayer:_border];
Вывод:
Комментарии:
1. Это работает отлично. Но есть один вопрос.. Что такое cWidth?
2. cWidth — это ширина четырех угловых линий @SahebSingh
3. Отлично … HTH 🙂 @SahebSingh