拉伸图片的几种方式

问题:当图片比较小,而图片框.或者按钮,比较大,图片填充整个按钮会导致变形,通过拉伸图片可以使得虽然拉伸而不变形.

拉伸处理后:

方式1.通过resizableImageWithCapInsets:resizingMode方法.

- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets resizingMode:(UIImageResizingMode)resizingMode NS_AVAILABLE_IOS(6_0); // the interior is resized according to the resizingMode

实现代码:

    UIImage *img = [UIImage imageNamed:@"RedButton"];

    CGFloat h = img.size.height * 0.5;
    CGFloat l = img.size.height * 0.5;

    UIImage *newImg = [img resizableImageWithCapInsets:UIEdgeInsetsMake(h,l, h, l) resizingMode:UIImageResizingModeStretch];
    self.imgView.image = newImg;

参数说明:

(UIEdgeInsets)capInsets:不拉伸的部分,设置到上下左右不拉伸的距离,只拉伸中间一小块或者一个点.
(UIImageResizingMode)resizingMode:这是一个枚举值,表示以什么样的方式拉伸图片.两种样式:
 UIImageResizingModeTile,//通过重复铺内部的一小块区域填充新图片的内部区域
//The image is tiled when it is resized. In other words, the interior region of the original image will be repeated to fill in the interior region of the newly resized image.
 UIImageResizingModeStretch,//通过缩放内部的图片内部的区域填充新图片的内部区域
//The image is stretched when it is resized. In other words, the interior region of the original image will be scaled to fill in the interior region of the newly resized imaged.

方式2:通过故事板,修改,x,y,width,height值.通过xy确定一个点,通过width,heigth确定宽高,由此获得图片中一小块内容,从而对这一小块内容进行拉伸

这是UIView的一个属性

@property(nonatomic)                 CGRect            contentStretch NS_DEPRECATED_IOS(3_0,6_0) __TVOS_PROHIBITED; // animatable. default is unit rectangle {{0,0} {1,1}}. Now deprecated: please use -[UIImage resizableImageWithCapInsets:] to achieve the same effect.

这个属性已经过期了,官方建议使用方式一.

#方式3:通过方法stretchableImageWithLeftCapWidth:topCapHeight.这是UIImage的一个方法

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

方法说明:

@interface UIImage(UIImageDeprecated)//不赞成使用

// use resizableImageWithCapInsets: and capInsets.

- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight __TVOS_PROHIBITED;
@property(nonatomic,readonly) NSInteger leftCapWidth __TVOS_PROHIBITED;   // default is 0. if non-zero, horiz. stretchable. right cap is calculated as width - leftCapWidth - 1
//如果leftCapWidth不为0,可以水平拉伸,右边覆盖部分范围等于( width - leftCapWidth - 1 )@property(nonatomic,readonly) NSInteger topCapHeight __TVOS_PROHIBITED;   // default is 0. if non-zero, vert. stretchable. bottom cap is calculated as height - topCapWidth - 1
//如果topCapHeight不为0,可以上下拉伸,下边覆盖部分范围等于(height - topCapWidth - 1)
@end

#实现代码

    UIImage *img = [UIImage imageNamed:@"RedButton"];

    CGFloat h = img.size.height * 0.5;
    CGFloat l = img.size.height * 0.5;

    UIImage *newImg = [img stretchableImageWithLeftCapWidth:h topCapHeight:l];
    self.imgView.image = newImg;

#方式4;

总结:

说是四种方式,说白了还是一种方式,按照自己的方式拉伸图片.通常,将整个图片拉伸会导致边角变形,这几种拉伸方式都是限定被拉伸区域从而实现拉伸而边角不变形.

时间: 2024-11-05 14:40:59

拉伸图片的几种方式的相关文章

iOS中拉伸图片的几种方式

假如下面的一张图片,是用来做按钮的背景图片的,原始尺寸是(128 * 112) 按钮背景图片.png 我们通过代码将这张图片设置为按钮的背景图片,假如我们将创建好的按钮的宽高设置为:(W=200, H=50)代码如下: // // ViewController.m // iOS图片拉伸总结 // // Created by Sunshine on 15/6/29. // Copyright (c) 2015年 YotrolZ. All rights reserved. // #import "V

Java基础知识强化之IO流笔记44:IO流练习之 复制图片的 4 种方式案例

1. 复制图片的 4 种方式案例: 分析: 复制数据,如果我们知道用记事本打开并能够读懂,就用字符流,否则用字节流. 通过该原理,我们知道我们应该采用字节流. 而字节流有4种方式,所以做这个题目我们有4种方式.推荐掌握第4种. 数据源: c:\\a.jpg -- FileInputStream -- BufferedInputStream 目的地: d:\\b.jpg -- FileOutputStream -- BufferedOutputStream 2. 4 种方式代码示例: 1 pack

设置背景图片的两种方式,并解决手机端背景图片高度自适应问题

1 设置背景图片的两种方式: 方式一: <img src="../img/10.jpg"/ class="back" id="Background"> .back{ position: fixed; width: 100%; height: 100%; display: block; z-index: -100; } 方式二:div class="body" id="Background">

Volley的Get、Post方式(JsonObjectRequest、StringRequest)以及Volley获取图片的3种方式

activity_main.xml 里面什么也没有 AndroidManifest.xml(重点是android:name="com.example.volley.MyApplication") <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"

UIImage创建图片的两种方式的区别

在工作中经常会遇到添加图片,用哪种方式添加更好呢?请看详解 方法一: UIImage *image = [UIImage imageNamed:@"haha"]; 这种方法创建的图片是从缓存中获取的,程序会先从缓存中查找是否有这张图片,如果有的话就加载,如果没有的话,会将图片添加到缓存再使用.这样的创建方式一般用于经常使用的使用,因为从缓存中添加图片会更快一些,节省时间.但是缺点是一旦添加到缓存中就不会被释放,如果图很多很大需要占用很多很大的内存空间. 方式二: NSString *p

【iOS开发-28】制造UITabBarController标签控制器的过程以及定制UITabBarItem文字图片的6种方式

一.一个简单的创造过程(实际项目不推荐这种方式,仅做演示理解原理用) 在AppDelegate.m中: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //创建一个到导航控制器 UIViewController *vc1=[[UIViewController alloc]init]; UINavigationControll

添加图片的两种方式

<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>js练习 js是脚本语言直接运行在浏览器上的.</title> <script type="text/javascript"> function addcontent(){ document.getElementById(&q

img标签使用默认图片的一种方式

基于html5提供的onerror这个时间属性. 写法如下 <img src="图片地址" onerror="javascript:this.src=\'默认的图片地址\'"> 测试如下 如图所示,显示的图片是默认图片. 以下是部分代码:分别用以下两段代码来测试 html+='<li><div class="pd"><a><img src="'+professor.img+'&quo

vue-cli3中引入图片的几种方式和注意事项

如果你是在数据中引入图片,他是从项目中引入的应该按第一种方式引入 如果不是在数据中引入图片,按第二种方式引入 原文地址:https://www.cnblogs.com/jxnc/p/12266781.html