2012-05-28 18 views
5

UIview'i otomatik hale getirmek için yuvarlatılmış köşeler (topLeft ve topRight) yapmak mümkün mü?Otomatik boyutlandırma için yuvarlak köşeler UIView

IB

: görünüm olarak IB tanımlanır SFDetailViewController.m

#import "SFDetailViewController.h" 
#import <QuartzCore/QuartzCore.h> 

@interface SFDetailViewController() 
@end 


@implementation SFDetailViewController 
@syntesyze header; 

-(void) viewDidLoad 
{ 
    .... 
    [self setCornerRadiusToHeader:header]; 
} 



-(void) setCornerRadiusToHeader:(UIView *)headerView 
{  
    CGRect bounds = headerView.layer.bounds; 
    UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:bounds 
               byRoundingCorners:(UIRectCornerTopLeft | UIRectCornerTopRight) 
                cornerRadii:CGSizeMake(8.0, 8.0)]; 

    CAShapeLayer *maskLayer = [CAShapeLayer layer]; 
    maskLayer.frame = bounds; 
    maskLayer.path = maskPath.CGPath; 

    [headerView.layer addSublayer:maskLayer]; 
    headerView.layer.mask = maskLayer; 

} 

SFDetailViewController.h

@interface SFDetailViewController : UIViewController <UITableViewDataSource, UITableViewDelegate, UITextFieldDelegate, PopoverViewListDelegate> 
{ 
    ... 

    UIView *header; 
} 
@property (nonatomic, retain) IBOutlet UIView *header; 

@end 

: İşte benim kodudur

Elde ettiğim şey - topRight köşesi düz, çünkü görünümün boyutu dinamik.

result

cevap

2

Sen UIViewContentModeRedrew böyle bir şey için UIView 'ın contentMode özelliğini ayarlamanız gerekir. İçerik modu, görünümün içeriğinin sınırları değiştiğinde nasıl değiştiğini denetler (otomatikleştirildiğinde olduğu gibi). Varsayılan olarak, yalnızca görünümün içeriğini uzatır, bu nedenle köşeleriniz gerilir.

1

ÇÖZÜM: i yazdı (void)drawRect:(CGRect)rect:

[header setNeedsDisplay]; 

hangisi, bu arada, çağırır:

sayesinde jbrennan için, ben viewDidLoad i diyoruz,

header.contentMode = UIViewContentModeRedraw; 

Sonra

set izleyen:

- (void)drawRect:(CGRect)rect 
{ 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextClearRect(context, rect); 

    UIColor *color = [UIColor lightGrayColor]; 
    CGContextSetFillColorWithColor(context, color.CGColor); 

    CGRect rrect = CGRectMake(CGRectGetMinX(rect)-2, CGRectGetMinY(rect), CGRectGetWidth(rect)+4, CGRectGetHeight(rect) + 1); 
    CGFloat radius = 10.0f; 

    CGFloat minx = CGRectGetMinX(rrect), midx = CGRectGetMidX(rrect), maxx = CGRectGetMaxX(rrect); 
    CGFloat miny = CGRectGetMinY(rrect), midy = CGRectGetMidY(rrect), maxy = CGRectGetMaxY(rrect); 

    CGContextMoveToPoint(context, minx, midy); 
    CGContextAddArcToPoint(context, minx, miny, midx, miny, radius); 
    CGContextAddArcToPoint(context, maxx, miny, maxx, midy, radius); 
    CGContextAddArcToPoint(context, maxx, maxy, midx, maxy, 0); 
    CGContextAddArcToPoint(context, minx, maxy, minx, midy, 0); 
    CGContextClosePath(context); 
    CGContextDrawPath(context, kCGPathFill); 

} 

SONUÇ:

result