IOS 学习笔记 UIImageView and contentMode

2023-05-16

目录

UIImageView

1 UIImageView的创建

1.1 代码布局创建UIImageView

1.2 UIImageView图片设置

2、 UIImageView重要属性

2.1、使用图片自身的宽高,自动填充整个屏幕,不会拉伸或者压缩,图片显示会超出屏幕

2.2 添加一个空白的UIImageView

2.3、根据控件尺寸显示图片,不做处理

3、设置图片显示的模式

3.1 UIViewContentModeScaleToFill

3.2 UIViewContentModeScaleAspectFit

3.3 UIViewContentModeScaleAspectFill

3.4 UIViewContentModeRedraw

3.5 UIViewContentModeCenter

3.6 UIViewContentModeTop

3.7 UIViewContentModeBottom

3.8 UIViewContentModeLeft

3.9 UIViewContentModeRight

3.10 UIViewContentModeTopLeft

3.11 UIViewContentModeTopRight

3.12 UIViewContentModeBottomLeft

3.13 UIViewContentModeBottomRight


UIImageView

UIImageView视图用来展示图片,熟悉其属性有助于展示处不同的效果

 

1 UIImageView的创建

在熟悉UIImageView的重要属性之前我们需要知道怎么在布局上创建出来UIImageView,一共有三种方式,如果不知道怎么创建可以参考这篇文章《IOS 学习笔记 UIView》

 

1.1 代码布局创建UIImageView

这里采用代码创建,在viewDidLoad函数中通过:

(1)初始化UIImageView的实例

UIImageView *imageView = [[UIImageView alloc]init];

2)通过imageNamed函数给创建的UIImageView实例设置图片

imageView.image = [UIImage imageNamed:@"girl"];

(3)使用UIImageView的frame属性设置UIImageView实例的宽高

imageView.frame = CGRectMake(0,0,imageView.image.size.width,imageView.image.size.height);

imageView.image.size.width 获取图片自身的宽度

imageView.image.size.width起作用需要提前设置图片,也就是imageView.image = [UIImage imageNamed:@"girl"]需要在其之前,因为这里取用的是图片的原始宽高数据

(4)将创建的UIImageView视图添加到根容器中

[self.view addSubview:imageView];

 

- (void)viewDidLoad {
    [super viewDidLoad];
    UIImageView *imageView = [[UIImageView alloc]init];
    
    //imageView.image.size.width起作用需要提前设置图片
    imageView.image = [UIImage imageNamed:@"girl"];
    //imageView.image.size.width 获取图片自身的宽度
    imageView.frame = CGRectMake(0,0,imageView.image.size.width,imageView.image.size.height);

    
    [self.view addSubview:imageView];
}

 

1.2 UIImageView图片设置

给UIImageView视图设置图片需要调用UIImage的imageNamed函数如下

imageView.image = [UIImage imageNamed:@"girl"]

girl.png这张图片需要先准备好,我们将这张图片直接拖拉进Assets.xcassets,imageNamed就能通过girl字符串找到这张图片了,当然并不一定要在Assets.xcassets中准备图片,别的目录也行,Assets.xcassets是在工程创建后默认生成的的图片资源文件夹,这里就直接使用了。

如下图

 

 

2、 UIImageView重要属性

 

2.1、使用图片自身的宽高,自动填充整个屏幕,不会拉伸或者压缩,图片显示会超出屏幕

- (void)viewDidLoad {
    [super viewDidLoad];
    UIImageView *imageView = [[UIImageView alloc]init];
    
    //imageView.image.size.width起作用需要提前设置图片
    imageView.image = [UIImage imageNamed:@"girl"];
    //imageView.image.size.width 获取图片自身的宽度
    imageView.frame = CGRectMake(0,0,imageView.image.size.width,imageView.image.size.height);

    
    
    [self.view addSubview:imageView];
}

这里采用代码写布局,因为是比较简单的布局

 

 

2.2 添加一个空白的UIImageView

width:300,height:200 如下图

- (void)viewDidLoad {
    [super viewDidLoad];
    UIImageView *imageView = [[UIImageView alloc]init];
    imageView.frame = CGRectMake(0,0,300,200);//设置控件位置和宽高
    imageView.backgroundColor = [UIColor orangeColor];//设置控件背景颜色
    [self.view addSubview:imageView];
}

 

2.3、根据控件尺寸显示图片,不做处理

- (void)viewDidLoad {
    [super viewDidLoad];
    UIImageView *imageView = [[UIImageView alloc]init];
    //imageView.image.size.width起作用需要提前设置图片
    imageView.image = [UIImage imageNamed:@"girl"];
    imageView.backgroundColor = [UIColor orangeColor];//设置控件背景颜色
    imageView.frame = CGRectMake(0,0,300,200);//设置控件位置和宽高
    [self.view addSubview:imageView];
}

在不做任何处理的情况下,如果图片非全屏幕设置,图片会全部展示,但是会被压缩变形,如何处理才能达到想要的效果需要配置UIImageView的contentMode和clipsToBounds属性。

 

 

 

3、设置图片显示的模式

imageView.contentMode = UIViewContentModeScaleToFill

可以设置图片显示模式,以达到处理图片的目的,适应裁剪和拉伸问题,一共有十三中模式可供选择。

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.clipsToBounds = YES;来使用,否则达不到效果

 

 

3.1 UIViewContentModeScaleToFill

- (void)viewDidLoad {
    [super viewDidLoad];
    UIImageView *imageView = [[UIImageView alloc]init];
    //imageView.image.size.width起作用需要提前设置图片
    imageView.image = [UIImage imageNamed:@"girl"];
    imageView.backgroundColor = [UIColor orangeColor];//设置控件背景颜色
    imageView.frame = CGRectMake(0,0,300,200);//设置控件位置和宽高
    imageView.clipsToBounds = YES;

//    imageView.contentMode = UIViewContentModeScaleToFill;
//    imageView.contentMode = UIViewContentModeScaleAspectFit;
    imageView.contentMode = UIViewContentModeScaleAspectFill;
    [self.view addSubview:imageView];
}

 

imageView.contentMode = UIViewContentModeScaleToFill

左图 : imageView.clipsToBounds = YES;右图 : imageView.clipsToBounds = NO

 

 

 

3.2 UIViewContentModeScaleAspectFit

imageView.contentMode  = UIViewContentModeScaleAspectFit

左图 : imageView.clipsToBounds = YES;右图 : imageView.clipsToBounds = NO

 

3.3 UIViewContentModeScaleAspectFill

imageView.contentMode  = UIViewContentModeScaleAspectFill

左图 : imageView.clipsToBounds = YES;右图 : imageView.clipsToBounds = NO

 

 

3.4 UIViewContentModeRedraw

imageView.contentMode  = UIViewContentModeRedraw

左图 : imageView.clipsToBounds = YES;右图 : imageView.clipsToBounds = NO

  

 

3.5 UIViewContentModeCenter

imageView.contentMode  = UIViewContentModeCenter

左图 : imageView.clipsToBounds = YES;右图 : imageView.clipsToBounds = NO

 

3.6 UIViewContentModeTop

imageView.contentMode  = UIViewContentModeTop

左图 : imageView.clipsToBounds = YES;右图 : imageView.clipsToBounds = NO

  

 

3.7 UIViewContentModeBottom

imageView.contentMode  = UIViewContentModeBottom

左图 : imageView.clipsToBounds = YES;右图 : imageView.clipsToBounds = NO

  

 

3.8 UIViewContentModeLeft

imageView.contentMode  = UIViewContentModeLeft

左图 : imageView.clipsToBounds = YES;右图 : imageView.clipsToBounds = NO

 

 

 

3.9 UIViewContentModeRight

imageView.contentMode  = UIViewContentModeRight

左图 : imageView.clipsToBounds = YES;右图 : imageView.clipsToBounds = NO

 

 

3.10 UIViewContentModeTopLeft

imageView.contentMode  = UIViewContentModeTopLeft

左图 : imageView.clipsToBounds = YES;右图 : imageView.clipsToBounds = NO

 

 

3.11 UIViewContentModeTopRight

imageView.contentMode  = UIViewContentModeTopRight

左图 : imageView.clipsToBounds = YES;右图 : imageView.clipsToBounds = NO

 

 

3.12 UIViewContentModeBottomLeft

imageView.contentMode  = UIViewContentModeBottomLeft

左图 : imageView.clipsToBounds = YES;右图 : imageView.clipsToBounds = NO

 

 

 

3.13 UIViewContentModeBottomRight

imageView.contentMode  = UIViewContentModeBottomRight

左图 : imageView.clipsToBounds = YES;右图 : imageView.clipsToBounds = NO

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IOS 学习笔记 UIImageView and contentMode 的相关文章

随机推荐