Я не думаю, что существует бизнес-причина вообще. Техническая причина, возможно, несмотря на это, едва - это - огромный timesuck во всем мире, и затем Вы смотрите на него в IE и ломаетесь и плачете.
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;
}
Почему бы вам не создать в 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.
если ВСЕ, что вам нужно, это черная рамка в один пиксель вокруг моего белого текста UILabel,
тогда я действительно думаю, что вы усложняете проблему, чем она есть на самом деле ... Я не знаю по памяти, какую функцию «рисовать rect / frameRect» вам следует использовать, но вам будет легко ее найти. этот метод просто демонстрирует стратегию (позвольте суперклассу делать работу!):
- (void)drawRect:(CGRect)rect
{
[super drawRect:rect];
[context frameRect:rect]; // research which rect drawing function to use...
}
Если вы хотите анимировать что-то сложное, лучший способ - чтобы программно сделать снимок экрана, а вместо этого анимировать!
Чтобы сделать снимок экрана представления, вам понадобится код вроде этого:
UIGraphicsBeginImageContext(mainContentView.bounds.size);
[mainContentView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Где mainContentView - представление, снимок экрана которого вы хотите сделать. Добавьте viewImage в UIImageView и оживите его.
Надеюсь, это ускорит вашу анимацию !!
N
Чтобы поместить рамку с закругленными краями вокруг UILabel, я делаю следующее:
labelName.layer.borderWidth = 1;
labelName.layer.borderColor = [[UIColor grayColor] CGColor];
labelName.layer.cornerRadius = 10;
(не забудьте включить QuartzCore/QuartzCore.h)