W jaki sposób zaokrąglony widok rect z przezroczystością jest wykonywany na iPhonie?
Wiele aplikacji wyświetla przezroczysty widok z zaokrąglonymi rogami i wskaźnikiem aktywności podczas czasochłonnej operacji.
Jak to się robi i czy można to zrobić po prostu używając Interface Builder(ponieważ jest wiele miejsc, z których chciałbym skorzystać)? Czy powinienem użyć imageview z zaokrąglonym prostym obrazem lub rozciągliwym obrazem? Czy muszę sam rysować tło?
Do tej pory udało mi się uzyskać podstawowy widok o podobnej przezroczystości przez ustawienie alphaValue w Interface Builder jednak nie ma zaokrąglonych rogów, a także przezroczystość wydaje się mieć zastosowanie do wszystkich podwidywań(nie chcę, aby wskaźnik tekst i activityindicator był przezroczysty, jednak nawet jeśli ustawiłem alphaValue na tych w IB wydaje się być ignorowany).
5 answers
view.layer.cornerRadius = radius;
Trudnym sposobem (który był wymagany w pierwszym SDK iPhone ' a) jest utworzenie własnej UIView
podklasy za pomocą metody drawRect:
:
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetRGBFillColor(context, 0,0,0,0.75);
CGContextMoveToPoint(context, rect.origin.x, rect.origin.y + radius);
CGContextAddLineToPoint(context, rect.origin.x, rect.origin.y + rect.size.height - radius);
CGContextAddArc(context, rect.origin.x + radius, rect.origin.y + rect.size.height - radius,
radius, M_PI, M_PI / 2, 1); //STS fixed
CGContextAddLineToPoint(context, rect.origin.x + rect.size.width - radius,
rect.origin.y + rect.size.height);
CGContextAddArc(context, rect.origin.x + rect.size.width - radius,
rect.origin.y + rect.size.height - radius, radius, M_PI / 2, 0.0f, 1);
CGContextAddLineToPoint(context, rect.origin.x + rect.size.width, rect.origin.y + radius);
CGContextAddArc(context, rect.origin.x + rect.size.width - radius, rect.origin.y + radius,
radius, 0.0f, -M_PI / 2, 1);
CGContextAddLineToPoint(context, rect.origin.x + radius, rect.origin.y);
CGContextAddArc(context, rect.origin.x + radius, rect.origin.y + radius, radius,
-M_PI / 2, M_PI, 1);
CGContextFillPath(context);
Uwaga: rect
ten kod powinien być pobrany z [self bounds]
(lub z dowolnego miejsca, w którym go chcesz), nie będzie to miało sensu z rect
przekazanym do metody drawRect:
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-19 11:07:58
[[3]}od iPhone SDK 3.0, możesz po prostu użyć właściwości cornerRadius
warstwy. Np.:
view.layer.cornerRadius = 10.0;
Wzdłuż tych samych linii można zmienić kolor i szerokość obramowania widoku:
view.layer.borderColor = [[UIColor grayColor] CGColor];
view.layer.borderWidth = 1;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-30 17:58:57
Wyodrębniłem odpowiedź @lostInTransit na tę funkcję:
static void ContextAddRoundedRect(CGContextRef c, CGRect rect, CGFloat radius) {
CGFloat minX = CGRectGetMinX(rect);
CGFloat maxX = CGRectGetMaxX(rect);
CGFloat minY = CGRectGetMinY(rect);
CGFloat maxY = CGRectGetMaxY(rect);
CGContextMoveToPoint(c, minX + radius, minY);
CGContextAddArcToPoint(c, maxX, minY, maxX, minY + radius, radius);
CGContextAddArcToPoint(c, maxX, maxY, maxX - radius, maxY, radius);
CGContextAddArcToPoint(c, minX, maxY, minX, maxY - radius, radius);
CGContextAddArcToPoint(c, minX, minY, minX + radius, minY, radius);
}
Który umieszcza ścieżkę w kontekście, z którym możesz zrobić, co możesz
Trochę inne połączenia CoreGraphics i nie zamknąłem ścieżki, gdybyś chciał dodać, że
CGContextFillPath(c);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-03 19:05:16
Twoim zdaniem zrób to metodą drawRect
float radius = 5.0f;
CGRect rect = self.bounds;
CGContextRef context = UIGraphicsGetCurrentContext();
rect = CGRectInset(rect, 1.0f, 1.0f);
CGContextBeginPath(context);
CGContextSetGrayFillColor(context, 0.5, 0.7);
CGContextMoveToPoint(context, CGRectGetMinX(rect) + radius, CGRectGetMinY(rect));
CGContextAddArc(context, CGRectGetMaxX(rect) - radius, CGRectGetMinY(rect) + radius, radius, 3 * M_PI / 2, 0, 0);
CGContextAddArc(context, CGRectGetMaxX(rect) - radius, CGRectGetMaxY(rect) - radius, radius, 0, M_PI / 2, 0);
CGContextAddArc(context, CGRectGetMinX(rect) + radius, CGRectGetMaxY(rect) - radius, radius, M_PI / 2, M_PI, 0);
CGContextAddArc(context, CGRectGetMinX(rect) + radius, CGRectGetMinY(rect) + radius, radius, M_PI, 3 * M_PI / 2, 0);
CGContextClosePath(context);
CGContextFillPath(context);
To sprawi, że Twój Zaokrąglony prostokąt będzie twoim widokiem. Pełny przykład można znaleźć w próbce HeadsUpUI dołączonej do zestawu SDK. HTH
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-23 13:03:56
MBProgressHUD....
http://www.cocoadev.com/index.pl?MBProgressHUD
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-05 14:41:11