2014-04-15 9 views
6

Ich habe eine UIView und zwei Unteransichten darin. Die Teilansichten haben abgerundete Ecken und einen Rahmenwert. Das Problem, das ich habe, ist, dass die äußeren Kanten der abgerundeten Grenze eine dünne Linie der Unteransicht Hintergrundfarbe enthalten. Ich muss etwas verpasst haben ?? mit der drawRect Methode einer benutzerdefinierte AnsichtsklasseUIView mit abgerundeter Ecke und Rand hat falsche Kantenfarbe

UIView *outerView = [[UIView alloc] initWithFrame:CGRectMake(0, 50, 320, 320)]; 
[self.view addSubview:outerView]; 
outerView.backgroundColor = [UIColor whiteColor]; 

UIView *innerView1 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 160, 320)]; 
[outerView addSubview:innerView1]; 
innerView1.backgroundColor = [UIColor blackColor]; 
innerView1.layer.borderWidth = 20; 
innerView1.layer.borderColor = [UIColor whiteColor].CGColor; 
innerView1.layer.cornerRadius = 20; 
//innerView1.layer.masksToBounds = YES; 

UIView *innerView2 = [[UIView alloc] initWithFrame:CGRectMake(160, 0, 160, 320)]; 
[outerView addSubview:innerView2]; 
innerView2.backgroundColor = [UIColor blackColor]; 
innerView2.layer.borderWidth = 20; 
innerView2.layer.borderColor = [UIColor whiteColor].CGColor; 
innerView2.layer.cornerRadius = 20; 
//innerView2.layer.masksToBounds = NO; 
//innerView2.clipsToBounds = YES; 
//innerView2.layer.shouldRasterize = YES; 
+0

Es helfen würde einen relevanten Screenshot gehören die Ausgabe zeigt. – rmaddy

+0

Ich habe deinen Code mit einem grünen Hintergrund und das ist was ich bekomme -> http://puu.sh/89bjO/6e551e085e.png ist das was du bekommst? Ich bin nicht wirklich zusammenpassen Ihr Problem mit dem, was ich bekomme –

+0

Ich sehe jetzt Ihren Fehler. Ich bin mit dem Code beschäftigt, um zu sehen, was das verursacht. –

Antwort

2

, um das Problem zu umgehen, die Hintergrundfarbe der Subviews clearColor gesetzt und dann die Hintergrundfarbe zeichnen. Hier ist der Code für die View-Klasse.

@interface WorkAroundView : UIView 
@end 

@implementation WorkAroundView 
- (void)drawRect:(CGRect)rect 
{ 
    CGFloat margin = self.layer.borderWidth; 
    CGRect background; 
    background.origin.x = margin; 
    background.origin.y = margin; 
    background.size.width = self.bounds.size.width - 2 * margin; 
    background.size.height = self.bounds.size.height - 2 * margin; 

    CGContextRef context = UIGraphicsGetCurrentContext(); 
    [[UIColor blackColor] set]; 
    CGContextFillRect(context, background); 
} 
@end 

Und hier ist, wie Sie die benutzerdefinierte Ansichtsklasse verwenden würden. Die einzige wirkliche Änderung gegenüber dem, was Sie gepostet haben, ist, dass die Hintergrundfarbe für die Unteransichten auf clearColor eingestellt ist.

UIView *outerView = [[UIView alloc] initWithFrame:CGRectMake(360, 200, 320, 320)]; 
[self.view addSubview:outerView]; 
outerView.backgroundColor = [UIColor whiteColor]; 

WorkAroundView *innerView1 = [[WorkAroundView alloc] initWithFrame:CGRectMake(0, 0, 160, 320)]; 
innerView1.backgroundColor = [UIColor clearColor]; 
innerView1.layer.borderWidth = 20; 
innerView1.layer.borderColor = [UIColor whiteColor].CGColor; 
innerView1.layer.cornerRadius = 20; 
[outerView addSubview:innerView1]; 

WorkAroundView *innerView2 = [[WorkAroundView alloc] initWithFrame:CGRectMake(160, 0, 160, 320)]; 
innerView2.backgroundColor = [UIColor clearColor]; 
innerView2.layer.borderWidth = 20; 
innerView2.layer.borderColor = [UIColor whiteColor].CGColor; 
innerView2.layer.cornerRadius = 20; 
[outerView addSubview:innerView2]; 
+0

Dies ist eine großartige Antwort – Legolas

1

einen Bézier-Pfad um die Ecke hinzufügen

CAShapeLayer *subLayer = [[CAShapeLayer alloc] init]; 
[subLayer setFillColor:[UIColor clearColor].CGColor]; 
[subLayer setStrokeColor:[UIColor whiteColor].CGColor]; 
[subLayer setLineWidth:1.0]; 
[subLayer setPath:[UIBezierPath bezierPathWithRoundedRect:imageView.bounds cornerRadius:imageView.layer.cornerRadius].CGPath]; 
[imageView.layer addSublayer:subLayer]; 
Verwandte Themen