- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
在我的应用程序中 - 有四个按钮,名称如下:
在按钮上方有一个 ImageView (或 UIView)。
现在,假设用户点击左上角按钮。上方的图像/ View 应在该特定角处圆角。
我在为 UIView 应用圆角时遇到了一些困难。
现在我正在使用以下代码将圆角应用于每个 View :
// imgVUserImg is a image view on IB.
imgVUserImg.image=[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"any Url Here"];
CALayer *l = [imgVUserImg layer];
[l setMasksToBounds:YES];
[l setCornerRadius:5.0];
[l setBorderWidth:2.0];
[l setBorderColor:[[UIColor darkGrayColor] CGColor]];
以上代码将圆度应用于提供的 View 的每个角。相反,我只想对选定的角应用圆度,例如 - 顶部/顶部 + 左侧/底部 + 右侧等。
有可能吗?怎么样?
最佳答案
从 iOS 3.2 开始,您可以使用 UIBezierPath
s 的功能来创建开箱即用的圆角矩形(只有您指定的角是圆角的)。然后,您可以将其用作 CAShapeLayer
的路径,并将其用作 View 层的掩码:
// Create the path (with only the top-left corner rounded)
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:imageView.bounds
byRoundingCorners:UIRectCornerTopLeft
cornerRadii:CGSizeMake(10.0, 10.0)];
// Create the shape layer and set its path
CAShapeLayer *maskLayer = [CAShapeLayer layer];
maskLayer.frame = imageView.bounds;
maskLayer.path = maskPath.CGPath;
// Set the newly created shape layer as the mask for the image view's layer
imageView.layer.mask = maskLayer;
就是这样 - 无需在 Core Graphics 中手动定义形状,也无需在 Photoshop 中创建蒙版图像。该层甚至不需要失效。应用圆角或更改为新角就像定义一个新的 UIBezierPath
并使用它的 CGPath
作为 mask 层的路径一样简单。 bezierPathWithRoundedRect:byRoundingCorners:cornerRadii:
方法的 corners
参数是位掩码,因此可以通过 ORing 对多个角进行圆角运算。
如果您想为此添加阴影,则需要做更多的工作。
因为 "imageView.layer.mask = maskLayer
"应用了 mask ,所以阴影通常不会显示在 mask 之外。诀窍是使用透明 View ,然后将两个子层(CALayer
s)添加到 View 层:shadowLayer
和 roundedLayer
。两者都需要使用 UIBezierPath
。图片作为 roundedLayer
的内容添加。
// Create a transparent view
UIView *theView = [[UIView alloc] initWithFrame:theFrame];
[theView setBackgroundColor:[UIColor clearColor]];
// Create the path (with only the top-left corner rounded)
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:theView.bounds
byRoundingCorners:UIRectCornerTopLeft
cornerRadii:CGSizeMake(10.0f, 10.0f)];
// Create the shadow layer
CAShapeLayer *shadowLayer = [CAShapeLayer layer];
[shadowLayer setFrame:theView.bounds];
[shadowLayer setMasksToBounds:NO];
[shadowLayer setShadowPath:maskPath.CGPath];
// ...
// Set the shadowColor, shadowOffset, shadowOpacity & shadowRadius as required
// ...
// Create the rounded layer, and mask it using the rounded mask layer
CALayer *roundedLayer = [CALayer layer];
[roundedLayer setFrame:theView.bounds];
[roundedLayer setContents:(id)theImage.CGImage];
CAShapeLayer *maskLayer = [CAShapeLayer layer];
[maskLayer setFrame:theView.bounds];
[maskLayer setPath:maskPath.CGPath];
roundedLayer.mask = maskLayer;
// Add these two layers as sublayers to the view
[theView.layer addSublayer:shadowLayer];
[theView.layer addSublayer:roundedLayer];
关于iphone - 使用 CALayers 的圆形 UIView - 只有一些角落 - 如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2264083/
我试图找到这些三角形角的像素值。我可以使用 Harris 角并获得角的所有 x、y 的 numpy 数组。我希望将这些角值存储在称为角的二维列表中,如 [[x1,y1], [x2,y2], [x3,y
我的谷歌地图实例中的信息窗口看起来很有趣: 构成信息窗口图形角落和末端的某些图像似乎丢失了。知道为什么会这样吗?我正在尝试,但还没有弄清楚。 我正在使用 gmap3 ,一个用于 google 的 V3
我有一个带有动态添加和删除选项卡的 QTabWidget。我还有一个 QToolButton 设置为角落小部件,以便处理其 clicked() 信号上的添加事件。 虽然添加效果非常好,但从小部件中删除
我是一名优秀的程序员,十分优秀!