8

我想在 uiscrollview 周围绘制边框/阴影,我知道我可以使用额外的视图或滚动视图到达那里,但不喜欢处理缺点,但我听说应该有可能直接为滚动视图绘制边框这就是我想要的。

我对 iphone 开发很陌生,任何答案都会有所帮助。

4

4 回答 4

19

如果您使用滚动视图(或任何 UIView)的 layer 属性,您可以轻松获得实心边框......

#import <QuartzCore/QuartzCore.h>
...
myView.layer.borderWidth = 2;
myView.layer.borderColor = [UIColor blackColor].CGColor;

您也可以通过设置属性使用图层来应用实时阴影layer.shadow*,但是使用此技术可能会降低性能,因此我通常更喜欢使用以下更复杂但性能更高的技术。您可以创建一个中间透明、边缘有阴影的 PNG 图像 - 它需要有 9 个不同的区域:每个角 4 个,每个边缘 4 个,中间有一个完全透明的 1x1 像素区域。例如,如果您的阴影在图像中延伸 6 个像素,则您的图像将是 13x13,具有 6 像素宽/高边框和 1x1 区域在中间。然后使用以下方法将其设置为可缩放图像:

newImage = [image stretchableImageWithLeftCapWidth:6 topCapHeight:6];

更新:由于 iOS 5.0stretchableImageWithLeftCapWidth:topCapHeight:已被弃用,因此仅当您仍想支持 iOS 4.x 设备时才使用此功能。如果您只想支持 iOS 5.0+ 设备,请改用:

newImage = [image resizableImageWithCapInsets:UIEdgeInsetsMake(6, 6, 6, 6)];

然后将图像放在父视图上,这样它就占据了滚动视图的整个区域。如果您希望阴影覆盖您的可滚动元素,(因此您的滚动视图看起来嵌入/位于页面的其余部分之后)然后在顶部放置一个透明的 UIView 并在其上放置阴影图像,以便它显示到您的滚动视图在它后面。

于 2010-10-22T13:26:55.233 回答
5

不要忘记:

#import <QuartzCore/QuartzCore.h>

如果你想使用

myView.layer.borderWidth = 2;
myView.layer.borderColor = [UIColor blackColor].CGColor;
于 2012-04-23T11:46:58.300 回答
2

要从 UIColor 获取 CGColorRef,您还可以使用以下示例:

myView.layer.borderWidth = 2;
myView.layer.borderColor = [UIColor blackColor].CGColor;
于 2011-08-24T20:31:11.313 回答
0

myView.layout.borderColor 在使用 UIColor 时会生成不兼容的指针警告,并且没有为我更改边框。

使用 CGColorRef 代替了我:

CGFloat lComponents[4] = {0,0,0,1};
CGColorSpaceRef lColorSpace = CGColorSpaceCreateDeviceRGB();
myView.layer.borderColor = CGColorCreate(lColorSpace, lComponents);
CGColorSpaceRelease(lColorSpace);
于 2011-08-05T13:45:54.373 回答