iOS开发image背景图片拉伸问题解决分析

 更新时间:2023年07月27日 11:31:31   作者:山水域  
这篇文章主要为大家介绍了iOS开发image背景图片拉伸问题解决分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

前言

(如果是imageView的图片拉伸问题,可直接看文章结尾,OC和Swift)

在开发中聊天、按钮等背景图片,UI设计师可以仅设计其边框样式,然后通过代码就行处理,以适应聊天文字的大小或按钮的大小。

这样不仅可以使安装包更轻巧而且可以更灵活的使用图片;

方法一:

即将弃用方法这个函数是UIImage的一个实例函数,它的功能是创建一个内容可拉伸,而边角不拉伸的图片,需要两个参数,第一个是左边不拉伸区域的宽度,第二个参数是上面不拉伸的高度。

根据设置的宽度和高度,将接下来的一个像素进行左右扩展和上下拉伸。

- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight;

注意:可拉伸的范围都是距离leftCapWidth后的1竖排像素,和距离topCapHeight后的1横排像素。

   UIImage *image = [UIImage imageNamed:@"圆角矩形-7-拷贝"];
    //原始图片样式添加
    self.originalImageView.image = image;
    //没处理好的图片
    self.badImageView.image = image;
//图片处理后的 将被弃用 方法一:
//这个函数是UIImage的一个实例函数,它的功能是创建一个内容可拉伸,而边角不拉伸的图片,需要两个参数,第一个是左边不拉伸区域的宽度,第二个参数是上面不拉伸的高度。
//根据设置的宽度和高度,将接下来的一个像素进行左右扩展和上下拉伸。
    [self.textImageView setImage:[image stretchableImageWithLeftCapWidth:image.size.width*0.5 topCapHeight:image.size.height*0.5]];
//注意:可拉伸的范围都是距离leftCapWidth后的1竖排像素,和距离topCapHeight后的1横排像素。

图片讲解

可拉伸的范围都是距离leftCapWidth后的1竖排像素,和距离topCapHeight后的1横排像素。

方法二:

iOS 5 推出

- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets; 
// create a resizable version of this image. the interior is tiled when drawn.
   UIImage *image = [UIImage imageNamed:@"圆角矩形-7-拷贝"];
    //原始图片样式添加
    self.originalImageView.image = image;
    //没处理好的图片
    self.badImageView.image = image;
//处理图片 iOS 5 方法三:
            CGFloat width = image.size.width;
            CGFloat height = image.size.height;
            CGFloat top = height/2.0f - 0.5f; // 顶端盖高度
            CGFloat bottom = height/2.0f - 0.5f ; // 底端盖高度
            CGFloat left = width/2.0f - 0.5f; // 左端盖宽度
            CGFloat right = width/2.0f - 0.5f; // 右端盖宽度
            UIEdgeInsets insets = UIEdgeInsetsMake(top, left, bottom, right);
            //创建 一个可变的image版本,内部平铺,类:UIImageResizingModeTile模式;
            self.textImageView.image = [image resizableImageWithCapInsets:insets];

图片讲解

中间的框框是复制平铺区域,在本工程中为2px大小,Cap部分(即线的区域)为保留样式

方法三:

iOS 6 方法

- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets resizingMode:(UIImageResizingMode)resizingMode;
 // the interior is resized according to the resizingMode
   UIImage *image = [UIImage imageNamed:@"圆角矩形-7-拷贝"];
    //原始图片样式添加
    self.originalImageView.image = image;
    //没处理好的图片
    self.badImageView.image = image;
            //处理图片 iOS 6 方法二:
            CGFloat width = image.size.width;
            CGFloat height = image.size.height;
            CGFloat top = height/2.0f - 0.5f; // 顶端盖高度
            CGFloat bottom = height/2.0f - 0.5f ; // 底端盖高度
            CGFloat left = width/2.0f - 0.5f; // 左端盖宽度
            CGFloat right = width/2.0f - 0.5f; // 右端盖宽度
            UIEdgeInsets insets = UIEdgeInsetsMake(top, left, bottom, right);
            // 指定为拉伸模式,伸缩后重新赋值
            //UIImageResizingModeStretch:拉伸模式,通过拉伸UIEdgeInsets指定的矩形区域来填充图片
            //UIImageResizingModeTile:平铺模式,通过重复显示UIEdgeInsets指定的矩形区域来填充图片
            _textImageView.image = [image resizableImageWithCapInsets:insets resizingMode:UIImageResizingModeTile];
// Swift
let image = UIImage(named: "rounded_rectangle_7_copy")
if image != nil {  
    self.originalImageView.image = image  
    self.badImageView.image = image  
} else {  
    self.originalImageView.image = image  
    self.badImageView.image = image  
}
let width = image?.size.width ?? 0  
let height = image?.size.height ?? 0
let top = height / 2 - 0.5  
let bottom = height / 2 - 0.5  
let left = width / 2 - 0.5  
let right = width / 2 - 0.5
let insets = UIEdgeInsets(top: top, left: left, bottom: bottom, right: right)
if image != nil {  
    let resizingMode = UIImage.resizableImageResizingMode.tile  
    self.textImageView.image = UIImage(resizableImageWithCapInsets: insets, resizingMode: resizingMode)  
} else {  
    self.textImageView.image = UIImage(resizableImageWithCapInsets: insets, resizingMode: resizingMode)  
}

补充知识

关于imageView的图片拉伸问题,在这里稍作总结,希望可以给你提供帮助。

typedef NS_ENUM(NSInteger, UIViewContentMode) {
    UIViewContentModeScaleToFill,
    UIViewContentModeScaleAspectFit,      
// contents scaled to fit with fixed aspect. remainder is transparent
    UIViewContentModeScaleAspectFill,    
 // contents scaled to fill with fixed aspect. some portion of content may be clipped.
    UIViewContentModeRedraw,             
 // redraw on bounds change (calls -setNeedsDisplay)
    UIViewContentModeCenter,             
 // contents remain same size. positioned adjusted.
    UIViewContentModeTop,
    UIViewContentModeBottom,
    UIViewContentModeLeft,
    UIViewContentModeRight,
    UIViewContentModeTopLeft,
    UIViewContentModeTopRight,
    UIViewContentModeBottomLeft,
    UIViewContentModeBottomRight,
};
//使用方法
[ImageView setContentMode:UIViewContentModeScaleAspectFit];
//OR
ImageView.contentMode = UIViewContentModeScaleAspectFit;
//以下方法,图片保持原有大小比例的情况下,展示在ImageView的上下左右等位置;如果视图大小小于图片的尺寸,则图片会超出视图边界;
    UIViewContentModeTop,
    UIViewContentModeBottom,
    UIViewContentModeLeft,
    UIViewContentModeRight,
    UIViewContentModeTopLeft,
    UIViewContentModeTopRight,
    UIViewContentModeBottomLeft,
    UIViewContentModeBottomRight,
    UIViewContentModeCenter,  
    UIViewContentModeScaleToFill,  //根据视图的比例去拉伸图片内容。图片可能变形;
    UIViewContentModeScaleAspectFit,  //保持图片内容的纵横比例,来适应视图的大小。
    UIViewContentModeScaleAspectFill,   //用图片内容来填充视图的大小,多余得部分可以被修剪掉来填充整个视图边界。 
    UIViewContentModeRedraw,     //这个选项是单视图的尺寸位置发生变化的时候通过调用setNeedsDisplay方法来重新显示。       

以上就是iOS开发image背景图片拉伸问题解决分析的详细内容,更多关于iOS image背景图片拉伸的资料请关注程序员之家其它相关文章!

相关文章

  • iOS App开发中UITextField组件的常用属性小结

    iOS App开发中UITextField组件的常用属性小结

    这篇文章主要介绍了iOS App开发中UITextField组件的常用属性小结,文中还介绍了UITextField隐藏键盘及为内容增加校验的两个使用技巧,需要的朋友可以参考下
    2016-04-04
  • iOS中大尺寸图片的旋转与缩放实例详解

    iOS中大尺寸图片的旋转与缩放实例详解

    图片缩小旋转是我们在开发中经常会遇到的一个功能,下面这篇文章主要给大家介绍了关于iOS中大尺寸图片的旋转与缩放的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧
    2018-09-09
  • 解决iOS13 无法获取WiFi名称(SSID)问题

    解决iOS13 无法获取WiFi名称(SSID)问题

    这篇文章主要介绍了解决iOS13 无法获取WiFi名称(SSID)问题,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • h5 ios输入框和键盘的兼容性优化指南

    h5 ios输入框和键盘的兼容性优化指南

    这篇文章主要给大家介绍了关于h5 ios输入框和键盘的兼容性优化的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • iOS实现输入框跟随键盘自动上移的实例代码

    iOS实现输入框跟随键盘自动上移的实例代码

    本篇文章主要介绍了iOS实现输入框跟随键盘自动上移的实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • iOS中的类、元类以及isa示例详解

    iOS中的类、元类以及isa示例详解

    从初学OC的时候就听人提起过OC对象中的isa指针,用来指向对象所属的类,从而可以在调用方法时通过isa指针找到相应的方法和属性,下面这篇文章主要给大家介绍了关于iOS中类、元类以及isa的相关资料,需要的朋友可以参考借鉴,下面来一起学习学习吧。
    2018-01-01
  • iOS性能优化浅析

    iOS性能优化浅析

    给大家通过理论和经验分析了IOS性能优化各方面的问题,以及处理的对应办法,有需要的朋友参考下。
    2018-02-02
  • iOS实时监控网络状态的改变

    iOS实时监控网络状态的改变

    这篇文章主要为大家详细介绍了iOS实时监控网络状态的改变的相关资料,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • iOS之Cocoapods安装教程(全面解析)

    iOS之Cocoapods安装教程(全面解析)

    下面小编就为大家带来一篇iOS之Cocoapods安装教程(全面解析)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • iOS实现简单的二级菜单效果

    iOS实现简单的二级菜单效果

    这篇文章给大家主要介绍的是利用iOS如何实现简单的菜单效果,文中给出了详细的示例代码,而且实现的比较简单,适合新人学习使用。感兴趣的朋友们可以参考借鉴,下面来一起看看吧。
    2016-10-10

最新评论

?


http://www.vxiaotou.com