如何在iphone上完成透明的rect视图?
当运行耗时的操作时,许多应用程序popup一个透明的圆angular视图和一个activityIndicator。
这个舍入是如何完成的,是否可以使用Interface Builder来完成(因为有很多地方我想使用类似的东西)? 或者,我应该使用一个圆形矩形或可伸缩图像的图像视图? 我需要自己画背景吗?
到目前为止,通过在界面生成器中设置alphaValue,我设法得到了一个具有相似透明度的基本视图,但是它没有圆angular,透明度似乎也适用于所有子视图(我不想要文本和活动指示符是透明的,但是即使我在IB中设置alphaValue它似乎被忽略)。
view.layer.cornerRadius = radius;
硬性的方法(以前在第一个iPhone SDK中是必需的)是用drawRect:
方法创build你自己的UIView
子类:
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);
注意:在这个代码中的rect
应该从[self bounds]
(或者你想要的任何位置)中取出,用rect
传递给drawRect:
方法是没有意义的。
从iPhone SDK 3.0开始,您可以简单地使用图层的cornerRadius
属性。 例如:
view.layer.cornerRadius = 10.0;
沿着同样的路线,你可以改变视图的边框颜色和宽度:
view.layer.borderColor = [[UIColor grayColor] CGColor]; view.layer.borderWidth = 1;
我把@ lostInTransit的响应抽象出来了
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); }
将path置于上下文中,以便您尽可能地进行处理
稍微不同的CoreGraphics调用,我没有closurespath,以防你想添加
CGContextFillPath(c);
在你的视图中,在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);
这将使您的视图的圆angular矩形。 您可以在随SDK提供的HeadsUpUI示例中find一个完整的示例。 HTH
MBProgressHUD ….
http://www.cocoadev.com/index.pl?MBProgressHUD