fra*_*yer 39 iphone cocoa-touch rounded-corners
许多应用程序在运行耗时的操作时会弹出带圆角的透明视图和activityIndicator.
这个舍入是如何完成的,是否可以使用Interface Builder来实现(因为有很多地方我想使用这样的东西)?或者,我应该使用带有圆形rect或可伸缩图像的imageview吗?我需要自己画背景吗?
到目前为止,我已经设法通过在Interface Builder中设置alphaValue来获得具有相似透明度的基本视图,但它没有圆角,并且透明度似乎也适用于所有子视图(我不想要text和activityindicator透明,但即使我在IB中设置alphaValue似乎也被忽略了).
Mir*_*ich 78
从iPhone SDK 3.0开始,您只需使用图层的cornerRadius
属性即可.例如:
view.layer.cornerRadius = 10.0;
Run Code Online (Sandbox Code Playgroud)
沿着相同的行,您可以更改视图的边框颜色和宽度:
view.layer.borderColor = [[UIColor grayColor] CGColor];
view.layer.borderWidth = 1;
Run Code Online (Sandbox Code Playgroud)
Kor*_*nel 47
view.layer.cornerRadius = radius;
Run Code Online (Sandbox Code Playgroud)
艰难的方式(以前在第一个iPhone SDK中需要)是UIView
使用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);
Run Code Online (Sandbox Code Playgroud)
注意:rect
在这段代码中应该取自[self bounds]
(或者你想要它的任何位置),rect
传递给drawRect:
方法是没有意义的.
我将@ 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);
}
Run Code Online (Sandbox Code Playgroud)
它会将路径放置在您可以使用的上下文中
稍微不同的CoreGraphics调用,我没有关闭路径,以防你想添加它
CGContextFillPath(c);
Run Code Online (Sandbox Code Playgroud)
在您的视图中,在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);
Run Code Online (Sandbox Code Playgroud)
这将使您的圆角矩形为您的视图.您可以在随SDK提供的HeadsUpUI示例中找到完整的示例.HTH
归档时间: |
|
查看次数: |
34790 次 |
最近记录: |