在iPhone上给滚动视图添加阴影或边框

8

我希望在UIScrollView周围/内部绘制边框/阴影,我知道可以通过添加额外的视图或UIScrollView来实现,但不喜欢这种方式的处理和缺点,但我听说应该有一种可能直接在UIScrollView上绘制边框,这是我想要的。

我对iPhone开发还比较新,任何答案都会有所帮助。

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.0起,stretchableImageWithLeftCapWidth:topCapHeight:被弃用,因此仅在您仍希望支持iOS 4.x设备的情况下使用它。如果您只想支持iOS 5.0+设备,请改用以下方法:

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

然后您将图像放在父视图上,以便占用滚动视图的整个区域。如果您想让阴影覆盖可滚动的元素(使您的滚动视图看起来嵌入/在页面的其余部分后面),那么请在顶部放置一个透明的UIView,并在其上放置阴影图像,以便其透过该视图显示到位于其后面的滚动视图中。


5

不要忘记:

#import <QuartzCore/QuartzCore.h>

如果你想使用
myView.layer.borderWidth = 2;
myView.layer.borderColor = [UIColor blackColor].CGColor;

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

从UIColor获取CGColorRef的方法如下:

myView.layer.borderWidth = 2;
myView.layer.borderColor = [UIColor blackColor].CGColor;

0

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

对我而言,使用CGColorRef有效:

CGFloat lComponents[4] = {0,0,0,1};
CGColorSpaceRef lColorSpace = CGColorSpaceCreateDeviceRGB();
myView.layer.borderColor = CGColorCreate(lColorSpace, lComponents);
CGColorSpaceRelease(lColorSpace);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接