2010-01-02 3 views
3

В другом посте luvieere поделился средствами, с помощью которых закругленные углы могут быть применены к текстовому виду с использованием рамки QuartzCore (see post). Мне кажется, что трехмерная граница, подобная найденной на UITextField, может быть создана через слои вместо использования фонового изображения.Как стиль UITextView с трехмерной тенейной границей?

Кто-нибудь знает, если и как это можно сделать? Мне бы очень хотелось найти способ добавления 3D-рамки БЕЗ необходимости запуска графического редактора и создания трехмерного затененного фона. Благодаря!

ответ

4

В View Controller:

newCommentBody.layer.cornerRadius = 7; 
    newCommentBody.clipsToBounds = YES; 

Сделать новый класс наследует TextView UITextView

#import "TextView.h" 
#import <CoreGraphics/CoreGraphics.h> 
#import <CoreGraphics/CGColor.h> 

@implementation TextView 

-(void) drawRect:(CGRect)rect { 
    UIGraphicsBeginImageContext(self.frame.size); 

    CGContextRef currentContext = UIGraphicsGetCurrentContext(); 
    CGContextSetLineWidth(currentContext, 1.0); //or whatever width you want 
    CGContextSetRGBStrokeColor(currentContext, 0.6, 0.6, .6, 1.0); 

    CGRect myRect = CGContextGetClipBoundingBox(currentContext); 
    //printf("rect = %f,%f,%f,%f\n", myRect.origin.x, myRect.origin.y, myRect.size.width, myRect.size.height); 

    float myShadowColorValues[] = {0,0,0,1}; 
    CGColorSpaceRef myColorSpace = CGColorSpaceCreateDeviceRGB(); 
    CGColorRef colorRef = CGColorCreate(myColorSpace, myShadowColorValues); 
    CGContextSetShadowWithColor(currentContext, CGSizeMake(0, -1), 3, colorRef); 
    // CGContextSetShadow(currentContext, CGSizeMake(0, -1), 3); 

    CGContextStrokeRect(currentContext, myRect); 
    UIImage *backgroundImage = (UIImage *)UIGraphicsGetImageFromCurrentImageContext(); 
    UIImageView *myImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; 
    [myImageView setImage:backgroundImage]; 
    [self addSubview:myImageView]; 
    [backgroundImage release]; 

    UIGraphicsEndImageContext(); 
} 

@end 
+0

Это близко! Однако затененные границы в TextView не «приклеивают» кромки. Если введен текст, который больше размера представления (т. Е. Прокрутки), затененная граница будет прокручиваться с текстом в TextView. Модификации пользовательского TextView необходимы для настройки размера рамки для текстового содержимого. – DSpeckleback

+0

Вы можете форматировать код в списках с помощью отступов 8 пробелов. – kennytm

+0

Чтобы тень не прокручивалась, вы можете создать представление «контейнер» с фреймом textview и нарисовать тень, а затем добавить в нее текстовое представление. –

1
m_txtViewSource.layer.borderWidth = 1; 

m_txtViewSource.layer.borderColor = [[UIColor grayColor] CGColor]; 

это не 3D, но это проще и безопасный код

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

  • Нет связанных вопросов^_^