Mam podklasę uiview, gdzie próbuję narysować zaokrąglony prostokąt z cieniem. Chociaż rysuje oba elementy, widzę cień przez zaokrąglone wypełnienie prostokąta. Jestem nowy w CG, więc prawdopodobnie brakuje mi czegoś prostego (choć nie wydaje się to być alfa wypełnienia, która jest ustawiona na 1). Oto kod prostownika.UIView z zaokrąglonym prostokątem i cieniem: cień pojawia się nad prostokątem
- (void)drawRect:(CGRect)rect {
// get the contect
CGContextRef context = UIGraphicsGetCurrentContext();
//for the shadow, save the state then draw the shadow
CGContextSaveGState(context);
CGContextSetShadow(context, CGSizeMake(4,-5), 10);
//now draw the rounded rectangle
CGContextSetStrokeColorWithColor(context, [[UIColor blackColor] CGColor]);
CGContextSetRGBFillColor(context, 0.0, 0.0, 1.0, 1.0);
//since I need room in my rect for the shadow, make the rounded rectangle a little smaller than frame
CGRect rrect = CGRectMake(CGRectGetMinX(rect), CGRectGetMinY(rect), CGRectGetWidth(rect)-30, CGRectGetHeight(rect)-30);
CGFloat radius = self.cornerRadius;
// the rest is pretty much copied from Apples example
CGFloat minx = CGRectGetMinX(rrect), midx = CGRectGetMidX(rrect), maxx = CGRectGetMaxX(rrect);
CGFloat miny = CGRectGetMinY(rrect), midy = CGRectGetMidY(rrect), maxy = CGRectGetMaxY(rrect);
// Start at 1
CGContextMoveToPoint(context, minx, midy);
// Add an arc through 2 to 3
CGContextAddArcToPoint(context, minx, miny, midx, miny, radius);
// Add an arc through 4 to 5
CGContextAddArcToPoint(context, maxx, miny, maxx, midy, radius);
// Add an arc through 6 to 7
CGContextAddArcToPoint(context, maxx, maxy, midx, maxy, radius);
// Add an arc through 8 to 9
CGContextAddArcToPoint(context, minx, maxy, minx, midy, radius);
// Close the path
CGContextClosePath(context);
// Fill & stroke the path
CGContextDrawPath(context, kCGPathFillStroke);
//for the shadow
CGContextRestoreGState(context);
}
Przeczytaj tę blogu http://bynomial.com/blog/?p=52&cpage=1#comment-1115. Odpowiada, jak to zrobić. –
rozwiązanie tutaj opisane jest najlepsze dla mnie, ponieważ pokazuje mi, jak używać niestandardowego obrazu (z maskToBounds = YES), a także cienia. dzięki! – Mark
@John: Wielkie dzięki za link, kolego ... Pomógł mi zacząć. :) – viral