Как я заставляю UILabel отобразить обрисованный в общих чертах текст?

Я не думаю, что существует бизнес-причина вообще. Техническая причина, возможно, несмотря на это, едва - это - огромный timesuck во всем мире, и затем Вы смотрите на него в IE и ломаетесь и плачете.

101
задан Axel Guilmin 27 July 2015 в 12:38
поделиться

5 ответов

I was able to do it by overriding drawTextInRect:

- (void)drawTextInRect:(CGRect)rect {

  CGSize shadowOffset = self.shadowOffset;
  UIColor *textColor = self.textColor;

  CGContextRef c = UIGraphicsGetCurrentContext();
  CGContextSetLineWidth(c, 1);
  CGContextSetLineJoin(c, kCGLineJoinRound);

  CGContextSetTextDrawingMode(c, kCGTextStroke);
  self.textColor = [UIColor whiteColor];
  [super drawTextInRect:rect];

  CGContextSetTextDrawingMode(c, kCGTextFill);
  self.textColor = textColor;
  self.shadowOffset = CGSizeMake(0, 0);
  [super drawTextInRect:rect];

  self.shadowOffset = shadowOffset;

}
164
ответ дан 24 November 2019 в 04:36
поделиться

Почему бы вам не создать в Photoshop границу UIView размером 1 пиксель, затем установить UIView с изображением и расположить его позади UILabel?

Код:

UIView *myView;
UIImage *imageName = [UIImage imageNamed:@"1pxBorderImage.png"];
UIColor *tempColour = [[UIColor alloc] initWithPatternImage:imageName];
myView.backgroundColor = tempColour;
[tempColour release];

Будет сохранено вы создаете подкласс объекта, и это довольно просто сделать.

Не говоря уже о том, что если вы хотите создать анимацию, она встроена в класс UIView.

-3
ответ дан 24 November 2019 в 04:36
поделиться

если ВСЕ, что вам нужно, это черная рамка в один пиксель вокруг моего белого текста UILabel,

тогда я действительно думаю, что вы усложняете проблему, чем она есть на самом деле ... Я не знаю по памяти, какую функцию «рисовать rect / frameRect» вам следует использовать, но вам будет легко ее найти. этот метод просто демонстрирует стратегию (позвольте суперклассу делать работу!):

- (void)drawRect:(CGRect)rect
{
  [super drawRect:rect];
  [context frameRect:rect]; // research which rect drawing function to use...
}
2
ответ дан 24 November 2019 в 04:36
поделиться

Если вы хотите анимировать что-то сложное, лучший способ - чтобы программно сделать снимок экрана, а вместо этого анимировать!

Чтобы сделать снимок экрана представления, вам понадобится код вроде этого:

UIGraphicsBeginImageContext(mainContentView.bounds.size);
[mainContentView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext(); 

Где mainContentView - представление, снимок экрана которого вы хотите сделать. Добавьте viewImage в UIImageView и оживите его.

Надеюсь, это ускорит вашу анимацию !!

N

4
ответ дан 24 November 2019 в 04:36
поделиться

Чтобы поместить рамку с закругленными краями вокруг UILabel, я делаю следующее:

labelName.layer.borderWidth = 1;
labelName.layer.borderColor = [[UIColor grayColor] CGColor];
labelName.layer.cornerRadius = 10;

(не забудьте включить QuartzCore/QuartzCore.h)

-3
ответ дан 24 November 2019 в 04:36
поделиться