UISlider 上的 resizableImageWithCapInsets 在 iOS 6 及更高版本中失真

Posted

技术标签:

【中文标题】UISlider 上的 resizableImageWithCapInsets 在 iOS 6 及更高版本中失真【英文标题】:resizableImageWithCapInsets on UISlider gets distorted in iOS 6 and up 【发布时间】:2013-08-12 17:09:30 【问题描述】:

我有一个UISlider,我想将自定义创建的UIImage 放在上面以进行拉伸。我是这样创建的:

UIImageView *iv = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width * difference, image.size.height)];
    iv.backgroundColor = [BSFunctions getColorFromHex:@"f7f8fa"];
    iv.image = cappedImage;
    [self addSubview:iv];

    UIGraphicsBeginImageContextWithOptions (iv.frame.size, YES, [[UIScreen mainScreen] scale]);
    [iv.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    [iv removeFromSuperview];

    return img;

我可以确认图像创建正确,看起来像这样:

但是,当我将它放到滑块上并且图像开始拉伸时,它看起来像这样:

我将它添加到滑块的方式如下:

UIImage *newImage = [self imageStretchedOnLeft];
    UIImage *rightStretchImage = [newImage resizableImageWithCapInsets:UIEdgeInsetsMake(0, newImage.size.width - 2, 0, 0)];
    [self setMinimumTrackImage:rightStretchImage forState:UIControlStateNormal];

它曾经在几个版本前工作过,当它突然停止工作时,我什么都没碰。更令人惊讶的是,UISliderios 5.1 模拟器上的工作方式与它在 iOS 5 上的工作方式一样!这整件事让我发疯,我什至不知道如何处理它。任何帮助将不胜感激。

我正在为 iOS 5 及更高版本创建一个应用程序并在 iOS 6 上对其进行测试

【问题讨论】:

【参考方案1】:

这样解决问题:

if (iosVersion < 6.0)
    rightStretchImage = [newImage resizableImageWithCapInsets:UIEdgeInsetsMake(0, newImage.size.width - 2, 0, 0)];
else
    rightStretchImage = [newImage resizableImageWithCapInsets:UIEdgeInsetsMake(0, newImage.size.width - 2, 0, 0) resizingMode:UIImageResizingModeStretch];

【讨论】:

以上是关于UISlider 上的 resizableImageWithCapInsets 在 iOS 6 及更高版本中失真的主要内容,如果未能解决你的问题,请参考以下文章

UISlider 上的 resizableImageWithCapInsets 在 iOS 6 及更高版本中失真

修复 UISlider swift 上的两种颜色

cap-insets

自定义 tableviewcell 上的 UISlider 和 UILabel 在第二次播放音频之前不会使用 avaudioplayer 更新

每次移动 UISlider 时删除注释 - mapView, Swift

UISlider 释放触摸时过于敏感