UIImageView

UIImageView

summary

UIImageView极其常用,功能比较专一:显示图片

pooperty

@property(nonatomic,retain) UIImage     *image; 
显示的图片
@property(nonatomic,copy) NSArray       *animationImages; 
显示的动画图片
@property(nonatomic) NSTimeInterval     animationDuration; 
动画图片的持续时间
@property(nonatomic) NSInteger          animationRepeatCount; 
动画的播放次数(默认是0,代表无限播放)
@property(nonatomic) UIViewContentMode  contentMode; 
内容模式: 一般用来控制图片如何显示

Method

- (void)startAnimating; // 开始动画
- (void)stopAnimating; // 停止动画
- (BOOL)isAnimating; // 是否正在执行动画

UIImageView-设置imageView的frame

initWithImage 
默认尺寸就是图片的尺寸,位置默认从(0,0)开始
imageView.frame = CGRectMake(100,100, image.size.width, image.size.height);
注意尺寸不能设置在图片之前(演示)

错误代码:imageView.frame.size.width = image.size.width
直接赋值size,但会出现OC语法错
原因:不能直接修改OC对象结构体属性的成员
结构体是值传递

如何赋值?
CGRect tempFrame = imageView.frame; // frame是一个新定义的变量
tempFrame =  image.size;
imageView.frame = tempFrame; // 如果少了这一句(不是对象,是结构体)

常见写法
imageView.frame = (CGRect){CGPointMake(100,100), imageView.image.size};
imageView.frame = (CGRect){CGPointMakeZero, imageView.image.size};
修改frame的3种方式(同样适用于bounds/center)
  • 1.直接使用CGRectMake函数
  • 2.利用临时结构体变量
  • 3.直接运用结构体赋值

UIImage类

一个UIImage对象代表一张图片对象
  • Method
 加载图片的方式:
   1. imageNamed:
   2. imageWithContentsOfFile:
 
   1. 加载Assets.xcassets这里面的图片:
    1> 打包后变成Assets.car
    2> 拿不到路径
    3> 只能通过imageNamed:来加载图片
    4> 不能通过imageWithContentsOfFile:来加载图片
 
   2. 放到项目中的图片:
    1> 可以拿到路径
    2> 能通过imageNamed:来加载图片
    3> 也能通过imageWithContentsOfFile:来加载图片

返回一张受保护且被拉伸的图片

iOS 5.0以前使用(弃用)这个方法会自动计算出偏向中间的一个1*1的方格也就是被拉伸的地方(默认使用拉伸)

[image stretchableImageWithLeftCapWidth:imageHeight *0.5 topCapHeight:imageHeight *0.5 ];

新方法

 [image resizableImageWithCapInsets:UIEdgeInsetsMake(<#CGFloat top#>, <#CGFloat left#>, <#CGFloat bottom#>, <#CGFloat right#>)];
 //拉伸模式 UIImageResizingModeTile平铺 UIImageResizingModeStretch拉伸
 [image resizableImageWithCapInsets:UIEdgeInsetsMake(imageheight * 0.5, imagewidth * 0.5, imageheight * 0.5 -1, imagewidth * 0.5 - 1) resizingMode:UIImageResizingModeTile];

contentMode属性

  • 带有scale单词的 <图片有可能被拉深>
  • UIViewContentModeScaleToFill
  • 将图片拉伸填充整个imageView
  • 图片显示的尺寸跟imageView的尺寸是一样的
  • 带有aspect单词的:保持图片原来的宽高比
  • UIViewContentModeScaleAspectFit
  • 保证刚好能看到图片的全部
  • UIViewContentModeScaleAspectFill<画图分析>
  • 拉伸至图片的宽度或者高度跟imageView一样
  • 没有带有scale的单词<图片绝对不会被拉伸>

裁剪

//居中显示
imageView.contentMode = UIViewContentModeCenter;
// 裁剪超出imageView边框的部分
imageView.clipsToBounds = YES;

UIImageView-帧动画的基本使用

demo

//创建UIImageView根据图片初始化大小
    UIImage *image = [UIImage imageNamed:@"1"];
    UIImageView *images = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, image.size.width, image.size.height)];
    //让图片居中
    images.center = CGPointMake(self.view.bounds.size.width *0.5, self.view.bounds.size.height *0.5);
    //把image赋给imageView
    images.image =image;
    //加到控制器的View中
    [self.view addSubview:images];
    //创建图片的数组
    NSMutableArray *imagesArr = [NSMutableArray array];
    //循环添加放入数组
    for (int i = 0; i < 20; i++) {
        NSString *imageName = [NSString stringWithFormat:@"%d",i+1];
        UIImage *ima = [UIImage imageNamed:imageName];
        [imagesArr addObject:ima];
    }
    //让全局变量的imageView赋值
    self.imageView = images;
    //让全局变量的arr赋值
    self.arr = imagesArr;
    //imageView透明度
    self.imageView.alpha = 0.5;
    // 设置播放时长
    // 1秒30帧, 一张图片的时间 = 1/30 = 0.03333 20 * 0.0333
    self.imageView.animationDuration = 1.0;
    // 开始动画
    [self.imageView startAnimating];

UIImageView-加载图片的缓存问题

  • imageNamed:
  • 有缓存
    • UIImage *image =[UIImage imageNamed:@"图片名"];
    • 使用场合:图片比较小、使用频率比较高
    • 建议:把需要缓存的图片放到Image.xcassets
  • 没有缓存
    • NSString *file = [[NSBundle mainBundle] pathForResource:@"图片名" ofType:@"图片扩展名"];
    • UIImage *image = [UIImage imageWithContentOfFile:file];
    • 只要方法名带有file的,都是传全路径
    • 使用场合:图片比较大,使用频率比较低
    • 建议:不需要缓存的图片不能放在Assets.xcassets中

总结

1.放在Assets.xcassets中的图片,只能通过文件名访问,没有全路径
2.大批量的图片不要放在Assets.xcassets中,默认就带有缓存
3.放到Assets.xcassets中的图片只能通过图片名去加载,苹果会压缩图片,而且默认带有缓存
4.很多资源都是加载项目中的,项目中的资源都是通过mainBundle来获取的

延迟做一些事情

    //iOS中有很多方式(GCD,dispatch...)
    [abc performSelector:@selector(stand:) withObject:@"123" afterDelay:10];
    // 10秒后调用abc的stand:方法,并且传递@“123”参数
    // abc可以是任意对象
    // NSTimeInterval -->进.h文件分析--->double--->秒

音频文件的简单播放

 // 创建一个音频文件的URL(URL就是文件的路径对象)
     NSURL *url = [[NSBundle mainBundle] URLForResource:@"音频文件名" withExtention:@“音频文件扩展名”];
    //另一写法
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"音频文件名.音频文件扩展名" withExtention:nil];
    // 创建播放器
    self.palyer = [AVPlayer playerWithURL:url];
    [self.player play];

Demo

demo1 初始化frame

//方式一 在初始化以后赋值frame
UIImageView *imageView = [[UIImageView alloc]init];
imageView.image = [UIImage imageNamed:@"2"];
imageView.frame = CGRectMake(10, 10, 100, 200);
imageView.frame = (CGRect){{10,10},{200,200}};
imageView.contentMode = UIViewContentModeScaleAspectFill;

//方式二 初始化的时候赋值frame
UIImageView *imageView1 = [[UIImageView alloc]initWithFrame:CGRectMake(10, 10, 100, 200)];
UIImage *imgae = [UIImage imageNamed:@"2"];
imageView1.image = imgae;

//方式三 根据图片的宽高初始化
UIImage *imgae = [UIImage imageNamed:@"2"];
UIImageView *imageView = [[UIImageView alloc]initWithImage:imgae];
//缺点  移动的时候只能通过center移动
imageView.center = CGPointMake(200, 300);

//方式四
UIImage *image = [UIImage imageNamed:@"2"];
UIImageView *imgaeView = [[UIImageView alloc]initWithFrame:CGRectMake(10, 10, image.size.width, image.size.height)];
imgaeView.image = image;
[self.view addSubview:imgaeView];



demo2 裁剪

// 1.1 创建UIImageView对象
    UIImageView *imageView = [[UIImageView alloc]init];
    // 1.2 设置frame
    imageView.frame = self.view.bounds;
    // 1.3 设置背景
    imageView.backgroundColor = [UIColor redColor];
    // 1.4 设置图片 (png不需要后缀)
    imageView.image = [UIImage imageNamed:@"1"];
    /**
     
     UIViewContentModeRedraw, // 重新绘制 (核心绘图) drawRact
     
     //带有Scale,标明图片有可能被拉伸或压缩
     UIViewContentModeScaleToFill, // 完全的压缩或拉伸
     
     // Aspect 比例,缩放是带有比例的
     UIViewContentModeScaleAspectFit, // 宽高比不变 Fit 适应
     UIViewContentModeScaleAspectFill, // 宽高比不变 Fill 填充
     
     //不带有Scale,标明图片不可能被拉伸或压缩
     UIViewContentModeCenter,
     UIViewContentModeTop,
     UIViewContentModeBottom,
     UIViewContentModeLeft,
     UIViewContentModeRight,
     UIViewContentModeTopLeft,
     UIViewContentModeTopRight,
     UIViewContentModeBottomLeft,
     UIViewContentModeBottomRight,
     */
    // 1.5 设置图片的内容模式
    imageView.contentMode = UIViewContentModeScaleAspectFit;
    // 2.0 加到控制器的view中
    [self.view addSubview:imageView];
    // 裁剪多余的部分
    imageView.clipsToBounds = YES;
    ```
`demo3 毛玻璃`
```objc
// 1.创建UIImageView对象
    UIImageView *image = [[UIImageView alloc]init];
    // 2. 设置尺寸
    //image.frame = CGRectMake(0, 0,self.view.bounds.size.width , self.view.bounds.size.height);
    image.frame = self.view.bounds;
    NSLog(@"%@",NSStringFromCGRect(image.frame));
    // 3. 设置背景颜色
    image.backgroundColor = [UIColor yellowColor];
    // 4. 设置背景图片
    image.image = [UIImage imageNamed:@"1"];
    // 5.设置图片的内容模式
    image.contentMode = UIViewContentModeScaleAspectFill;
    
    // 6.加毛玻璃
    // 6.1 创建UIToolBar对象
    UIToolbar *tob = [[UIToolbar alloc]init];
    
    // 6.2 设置toolBar的frame
    tob.frame = image.frame;
    // 6.3 设置毛玻璃的样式
    tob.barStyle = UIBarStyleBlack;
    tob.alpha = 0.85;
    // 6.4 加到imageView中
   
    [self.view addSubview:image];
    [self.view addSubview:tob];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容