2013-11-26 7 views
1

Может кто-нибудь, пожалуйста, объясните что правильный способ нарисовать пунктирную прямоугольную рамку вокруг UILabel, который может быть изменен и подвижным, я искал много, нашел 2 способ:нарисовать пунктирную рамку вокруг UILabel содержащего текста

Первого является ,

_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 = @[@4, @2]; 

[self.layer addSublayer:_border]; 

И в ваших layoutsubviews, поставить это:

_border.path = [UIBezierPath bezierPathWithRect:self.bounds].CGPath; 
_border.frame = self.bounds; 

во-вторых, это может быть сделано путем рисования аЬ порядок вокруг NSAttributed строки в UILabel

вопросов:

  1. Поскольку для изменения размера UILabel на основе пользовательского прикосновения, уже я меняю его размер сенсорных методов, снова мне нужно написать кучу строк, чтобы изменить размер пограничного слоя
  2. Не получил подход к рисованию границы вдали от текста, а не по тексту.

Может кто-нибудь помочь в сортировке оптимизированного подхода.

+0

вам нужна 'UILabel'? или вы можете использовать 'UITextField', с собственными пунктирными границами? – theShay

+0

Попробуйте это. Http://stackoverflow.com/a/34589401/3908884 –

ответ

1

Следующий код гораздо лучше понять

CAShapeLayer *shapeLayer = [CAShapeLayer layer]; 
     CGRect shapeRect = CGRectMake(0.0f, 0.0f, 200.0f, 100.0f); 
     [shapeLayer setBounds:shapeRect]; 
     [shapeLayer setPosition:CGPointMake(self.coreImageView_.frameX, self.coreImageView_.frameBottom - self.coreImageView_.frameHeight/2)]; 
     [shapeLayer setFillColor:[[UIColor clearColor] CGColor]]; 
     [shapeLayer setStrokeColor:[[UIColor whiteColor] CGColor]]; 
     [shapeLayer setLineWidth:2.0f]; 
     [shapeLayer setLineJoin:kCALineJoinRound]; 
     [shapeLayer setLineDashPattern: 
     [NSArray arrayWithObjects:[NSNumber numberWithInt:5], 
     [NSNumber numberWithInt:5], 
      nil]]; 

для более check this или вы можете просто поместить изображение для UITextfeild и растянуть его. ИЛИ попробуйте

[yourView.layer setBorderWidth:5.0]; 
[yourView.layer setBorderColor:[[UIColor colorWithPatternImage:[UIImage imageNamed:@"DotedImage.png"]] 
+1

Используя современный синтаксис, последняя строка становится более читаемой: '[shapeLayer setLineDashPattern: @ [@ 5, @ 5]];' – DarkDust

+0

Да Изображение - это , но снова его рамка должна быть скорректирована в соответствии с UILabel (Resizable, Movable). Точно так же мы можем сделать это через CAShapeLayer. если мы нарисуем Dotted Border через CAShapeLayer, его граница также должна быть скорректирована в соответствии с UILabel по его размеру и положению, но это не работает (In Touch Method, в котором установлен кадр UILabel, мы также устанавливаем рамку слоя, но пограничный слой не перемещается вдоль UILabel). Кроме того, какой из них лучше или есть какой-либо другой хороший подход – user1740045

+0

@ user1740045 вы можете столкнуться с 'CATextLayer'? –

Смежные вопросы