2009-05-31 2 views
0

Я хочу, чтобы текст в UIView перехватил с помощью drawInRect:withFont:lineBreakMode, но работает только в текущем контексте.Как рисовать текст в подвью?

Можно ли нарисовать текст в подвью с текущего вида?

Подраздел представляет собой общий экземпляр UIView, и я действительно не хочу создавать новый класс UIView, который можно использовать только для этой цели, если я смогу его избежать.

ответ

1

Одним из вариантов было бы добавить CALayer к слою представления вместо добавления UIView к представлению. CALayer имеет свойство delegate, которому вы можете назначить любой объект. CALayer называет:

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx 

на delegate, которые вы можете предпринять, чтобы сделать что-то вроде:

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx { 
    if (layer == myLayer) { 
     UIGraphicsPushContext(ctx); 
     [string drawInRect:rect withFont:font lineBreakMode:mode]; 
     UIGraphicsPopContext(); 
    } 
} 
0

Нет, вы не можете делать то, что вы описали. Подклассификация UIView - это именно тот метод, который вы должны использовать для этого - нет ничего плохого в создании подкласса UIView, который имеет простой метод -drawRect:.

1

Нет, если вы собираетесь что-то делать с контекстом, вы должны быть в этом представлении -drawRect :. Вы всегда можете сделать свой subview подклассом UIView, который переопределяет -drawRect: для отображения нужного вам текста ... но в этот момент вы как бы изобретаете UILabel.

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