可调整大小的UIImage,其中外部延伸和内部保持相同

时间:2012-06-27 00:51:26

标签: ios ios5 uiimageview uiimage

我正在尝试为我的应用中的竖条创建“抓地力”,以向用户显示他们可以在视图上滑动。我想只使用一个小版本的图像,它有一个抓地力,上面和下面1个像素,这是酒吧其余部分的背景。所以:

ssss          ssss
gggg  becomes ssss
ssss          gggg
              ssss
              ssss

方法resizableImageWithCapInsets:允许你告诉iOS不要调整外边缘,但是有没有办法告诉它不调整内部和拉伸外部?

我已经尝试指定一个超大的上限,UIEdgeInsetsMake(29.0f, 0.0f, 29.0f, 0.0f),这导致抓握位于图像框架的顶部,但是否则是我正在寻找的正确拉伸行为。我只需将把手部分放在框架中心即可。

感兴趣的人的完整代码(这导致在整个长度上重复抓握):

gripBar = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"grip"] resizableImageWithCapInsets:UIEdgeInsetsMake(1.0f, 0.0f, 1.0f, 0.0f)]];
gripBar.frame = CGRectMake(0, 0, gripWidth, fullHeight);
[view gripBar];

更新:基于所选答案的工作代码

@implementation GripBar

- (id)init {
    self = [super init];
    if (self) {
        UIImageView *bar = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"gripback"] resizableImageWithCapInsets:UIEdgeInsetsMake(0.0f, 0.0f, 1.0f, 0.0f)]];
        bar.autoresizingMask = UIViewAutoresizingFlexibleHeight;
        [self addSubview:bar];

        UIImageView *grip = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"grip"]];
        grip.contentMode = UIViewContentModeCenter;
        grip.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin;
        [self addSubview:grip];
    }
    return self;
}

@end

1 个答案:

答案 0 :(得分:1)

最简单的方法可能是让您的抓握部件成为背景拉伸或平铺的较大条形视图的(小高度,但全宽)子视图。例如,您可以通过自动调整遮罩将握柄部分保持在较大视图的中心位置。