2012-02-22 92 views
1

我需要一些帮助来理解在UIView上使用contentStretch属性。我会很感激1)关于如何达到我要去的效果的一些指导和2)关于如何使用这个属性的任何全面文档的参考。虽然我以为我了解苹果的文档,但我现在看到我没有。这是我想要做的。使用contentStretch拉伸UIView的一部分

我有一个自定义的UIView呈现一个看起来像图一样的视图。下面。这个UIView的drawRect方法使用不同的颜色和效果来绘制左边的内部框(带有圆角和白色背景),并且影响其余部分的视图。此外,UIView的四个角不可拉伸(这将导致失真),所以我只需要拉伸UIView背景的中心。

我想将这个视图增长成与图b所示相似的形状。下面。这样做时,我只需要将白色框外部的视图部分(或白色框右侧)拉伸/重复,以增加UIView的高度。

sketch1

在我所有的尝试我只能够产生影响类似于图C视图中的视图和结果的整个宽度的strecth。

sketch2

是否有可能对我来说,使用contentStretch达到我想要的效果(图B)?是否还有其他一些技术我应该用于重新绘制整个视图,或者重新绘制唯一的(或最佳)方法来解决这个问题?

感谢,

回答

1

要实现这一点与contentStretch,你就必须设置contentStretch矩形,这样其边缘低于白框的底部边缘,所以其的边缘是右边的白色方块的右边缘。你可能会发现你的背景图案太多,看起来很丑。

相反,给你的看法一个只画白盒的子视图。设置子视图的弹簧和支柱,使箱子保持在左上角,不会拉伸。

+0

上面的数字有点误导。它们只是我实际视图的简化线框(用于说明目的)。在我的实际视图中,白色框是一个透明的(alpha = 0)窗口,所以我不知道如何使它成为子视图,并且它仍然像背景上的窗口一样。至于将contentStretch矩形设置在白色方块的下方和右侧(这是我担心我将不得不尝试的),我没有足够的空间来做到这一点,因为白色方块下方的区域处于不可拉伸的区域(拉伸会导致背景变形)。 – kodie 2012-02-22 05:06:03

+0

在这种情况下,只需使用'UIViewContentModeRedraw'并在'drawRect:'中绘制所需的内容即可。 – 2012-02-22 05:40:57

+0

这就是我所担心的,但也是我的预期。谢谢, – kodie 2012-02-22 17:43:18

0

我会做白盒顶部伸展,并用colorWithPatternImage填充图案的背景视图:

patternView.backgroundColor = [UIColor colorWithPatternImage:@"myBackgroundPattern.png"]; 

和黑色笔触可以用做:

#include <QuartzCore/QuartzCore.h> 
... 
patternView.layer.borderWidth = 2.f; 
patternView.layer.borderColor = [[UIColor blackColor] CGColor]; 
0

什么你正在尝试使用UIImage的resizableImageWithCapInsets方法来完成。这样,您可以在图像的每一侧设置封面宽度,并指定图像的哪一部分需要重复(不拉伸)。

一种UIEdgeInset是由如下四个分量(CGFloat的topCapWith,CGFloat的leftCapWith,CGFloat的bottomCapWith,CGFloat的rightCapWith)

代码

UIImage * backgroundImage = [[UIImage imageNamed:@"Stretch.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(80, 4, 4, 10)]; 
    backgroundImageView.image = backgroundImage; 
0

由于内容拉伸低于会做的伎俩的一个结构不推荐使用,最好的方法是使用自动布局。在内部矩形中给出一个定义的高度和宽度常数,并将其顶部和主要约束绑定到父视图。 为了在外部矩形中获得底部生长,绑定它的底部约束,或者您也可以调整它的高度。