2012-06-16 3 views
2

Я искал документацию на Apple и другие сообщения в Stack Overflow, но мне все еще не удается добавить тень к внутренней части UITextView. Я хотел бы сделать его похожим на UITextField. Вот код, который я пробовал.Shadowing UITextview как UITextField

CALayer *frontLayer = self.frontField.layer; 
[frontLayer setBorderColor:CGColorCreate(CGColorSpaceCreateDeviceGray(), nil)]; 
[frontLayer setBorderWidth:1]; 
[frontLayer setCornerRadius:5]; 
[frontLayer setShadowRadius:10.0]; 
CGSize shadowOffset = {0.0,3.0}; 
[frontLayer setShadowOffset:shadowOffset]; 
[frontLayer setShadowOpacity:1]; 
self.frontField.clipsToBounds = YES; 

Где я иду не так?

ответ

2

Начните с простого и попробовать это:

[myTextView.layer setShadowColor:[[UIColor blackColor] CGColor]]; 
[myTextView.layer setShadowOffset:CGSizeMake(1.0, 1.0)]; 
[myTextView.layer setShadowOpacity:1.0]; 
[myTextView.layer setShadowRadius:0.3]; 
[myTextView.layer.masksToBounds = NO]; //<-- for UITextView! 

для оптимизации производительности добавить:

view.layer.shadowPath = [UIBezierPath bezierPathWithRect:myTextView.bounds].CGPath; 

Затем вы можете добавить другие свойства назад в 1 на 1 и посмотреть, что вызывает проблему для тебя.

+0

Я вошел в код при условии, и это не влияет на вид. Это похоже на простой UITextView. Предполагалось ли это сделать? Я новичок в работе с CALayers и т. П., Поэтому я не уверен, как все должно работать вместе. – Halen

+0

Этот код работает с общим 'UIView', но странно не с' UITextView'. Понятия не имею почему. Чтобы решить вашу проблему, вы можете просто добавить 'UITextView' в' UIView' того же размера и добавить тень в объект 'UIView'. –

+0

А, ок. Спасибо за разъяснения. – Halen

0

Согласно 25 iOS performance tips & tricks, добавление тени путем установки shadowOffset является дорогостоящей операцией и влияет на производительность.

Core Animation должен сделать закадровый пропуск первого определения точной формы вашего точки зрения, прежде чем он может оказать тень, которая является довольно дорогостоящей операцией.

Вы можете использовать вместо:

myTextView.layer.shadowPath = [[UIBezierPath bezierPathWithRect:view.bounds] CGPath]; 
Смежные вопросы