UIImageView xib里面拉伸图片技巧

拉伸图片的时候代码里和xib里面的图片名字去掉@2x,但是原始图片文件得要xxx@2x.png

The X and Y values seem to be the positions for the stretch starting point, relative to the entire width and height of the image, i.e. 0.5 would mean a point in the middle of the image.

Same thing for the Width and Height: sizes for the stretchable area, relative to the image size, i.e. setting it to a value of 1 / imageWidth would mean the stretchable area is 1 pixel wide. The strange thing is 0 also work fine for the blue pill button (could be for convenience reasons?).

Below, view modes are set to "Scale to Fill". The images are stretchable images fromhttps://github.com/0xced/UIKit-Artwork-Extractor.

enter image description here

This answer was inspired by http://www.slideshare.net/mystcolor/stretchable-images-in-uiimageview-


In cases where you want more than one pixel to stretch (ie. a pattern in the center of the button) the stretchable UIImage does not work.

The UIButton's contentStretch does also not work properly.

How I solved it: I subclassed UIButton and added a UIImageView *backgroundImageView as property and placed it at index 0 as a subview within the UIButton. I then ensure in layoutSubviews that it fits the button entirely and set the highlighted states of the imageView. All you need to do is handover a UIImageView with the correct contentStretch and contentMode applied.

.h file

@interface ButtonWithBackgroundImage : UIButton {
    UIImageView *backgroundImageView;
}
@property (retain) UIImageView *backgroundImageView;
+ (ButtonWithBackgroundImage*)button;
@end

.m file

@implementation ButtonWithBackgroundImage
@synthesize backgroundImageView;

+ (ButtonWithBackgroundImage*)button {
return [self buttonWithType:UIButtonTypeCustom];
}
- (void)setBackgroundImageView:(UIImageView*)img {
    [backgroundImageView removeFromSuperview];
    [backgroundImageView release];

    backgroundImageView = [img retain];

    if(backgroundImageView){
        [self insertSubview:backgroundImageView atIndex:0];
        [self setNeedsLayout];
    }
}

- (void)setSelected:(BOOL)select {
    [super setSelected:select];
    // we subclass the setSelect method to highlight the background imageview
[backgroundImageView setHighlighted:select||self.highlighted];
}
- (void)setHighlighted:(BOOL)highl {
    [super setHighlighted:highl];

    // we subclass the setHighlighted method to highlight the background imageview    
    [backgroundImageView setHighlighted:highl||self.selected];
}

- (void)layoutSubviews {
    [super layoutSubviews];

    self.backgroundImageView.frame = self.bounds;
}

- (void)dealloc {
    [backgroundImageView release];
    backgroundImageView = nil;
    [super dealloc];
}
@end

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/zsw-1993/p/4879972.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值