2012-05-28 10 views
5

¿Es posible hacer esquinas redondeadas (topLeft y topright) a autosizing UIView? Aquí está mi código:esquinas redondas para autosizing UIView

SFDetailViewController.h

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

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

@end 

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; 

} 

La vista se define en el IB como:

IB

lo que me pasa - la esquina superior derecho es recta, debido a que el tamaño de la vista es dinámico.

result

Respuesta

2

Tiene que establecer la propiedad contentMode sus UIView 's a algo así como UIViewContentModeRedrew. El modo de contenido controla cómo cambia el contenido de la vista cuando se modifican sus límites (como cuando se vuelve a escribir). De forma predeterminada, simplemente extiende el contenido de la vista, por lo que se estiran las esquinas.

1

SOLUCIÓN:

Gracias a jbrennan, me puse

header.contentMode = UIViewContentModeRedraw; 

Luego, en viewDidLoad yo llamo:

[header setNeedsDisplay]; 

Lo cual, por cierto, pide: (void)drawRect:(CGRect)rect que escribí la siguiente:

- (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); 

} 

RESULTADO:

result

Cuestiones relacionadas