UIView

2012-05-28 21 views
5

ऑटोोज़ाइजिंग के लिए गोल कोनों को यूवीव को स्वत: करने के लिए गोलाकार कोनों (टॉप लेफ्ट और टॉपराइट) बनाना संभव है?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; 

} 

दृश्य के रूप में आईबी में परिभाषित किया गया है:

IB

यहाँ मेरी कोड है

मुझे क्या मिलता है - टॉपराइट कोने सीधे है, क्योंकि दृश्य का आकार गतिशील है।

result

उत्तर

2

आप UIViewContentModeRedrew की तरह कुछ करने के लिए अपने UIView के contentMode संपत्ति सेट करना होगा। कंटेंट मोड नियंत्रित करता है कि जब इसकी सीमाएं बदल जाती हैं तो दृश्य की सामग्री कैसे बदलती है (जैसे कि यह ऑटोरेसाइज़ किया जाता है)। डिफ़ॉल्ट रूप से, यह केवल दृश्य की सामग्री को फैलाता है, यही कारण है कि आपके कोनों को फैलाया जाता है।

1

समाधान:

धन्यवाद jbrennan करने के लिए, मैं

सेट
header.contentMode = UIViewContentModeRedraw; 

फिर, viewDidLoad में मैं फोन:

[header setNeedsDisplay]; 

कौन, वैसे, कॉल: (void)drawRect:(CGRect)rect है कि मैं ने लिखा है निम्नलिखित:

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

} 

परिणाम:

result

 संबंधित मुद्दे