常见的几种UIView

UIView常见控件

UILabel

  • 什么是UILabel?
    • UILabel极其常用,功能比较专一:显示文字
  • UILabel的常见属性
    • 显示的文字
      @property(nonatomic,copy)   NSString *text;
      
    • 字体
    @property(nonatomic,retain) UIFont *font;
        ```
    - 文字颜色
    ```obj
    @property(nonatomic,retain) UIColor *textColor;
        ```
    - 对齐模式(比如左对齐、居中对齐、右对齐)
    ```obj
    @property(nonatomic)NSTextAlignment textAlignment;
        ```
    - 文字行数
    ```obj
    @property(nonatomic) NSInteger numberOfLines;
        ```
    - 换行模式
    ```obj
    @property(nonatomic) NSLineBreakMode lineBreakMode;
        ```
    
  • UILabel的各种属性又包含很多属性,读者可自行查找


    属性描述.png

UIImageView

  • 什么是UIImageView?

    • UIImageView极其常用,功能比较专一:显示图片
  • UIImageView的常见属性

    • 显示的图片

    @property(nonatomic,retain) UIImage *image;
    ```

    • 显示的动画图片
    @property(nonatomic,copy) NSArray *animationImages;
        ```
    - 动画图片的持续时间
    ```obj
    @property(nonatomic) NSTimeInterval animationDuration;
        ```
    - 动画的播放次数(默认是0,代表无限播放)
    ```obj
    @property(nonatomic) NSInteger animationRepeatCount;
        ```
    
  • UIImmageView的常见方法

    • (void)startAnimating; // 开始动画
    • (void)stopAnimating; // 停止动画
    • (BOOL)isAnimating; // 是否正在执行动画
  • UIImmageView的contentMode属性

  • 带有scale单词的:图片有可能会拉伸

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

    • UIViewContentModeCenter
    • UIViewContentModeTop
    • UIViewContentModeBottom
    • UIViewContentModeLeft
    • UIViewContentModeRight
    • UIViewContentModeTopLeft
    • UIViewContentModeTopRight
    • UIViewContentModeBottomLeft
    • UIViewContentModeBottomRight
  • initWithImage:方法

    • 利用这个方法创建出来的imageView的尺寸和传入的图片尺寸一样

图片类UIImage

  • 一个UIImage对象代表一张图片,一般通过imageNamed:方法就可以通过文件名加载项目中的图片(该方法存在缓存)或者通过imageWithContentsOfFile:(该方法没有缓存)
    UIImage *image = [UIImage imageNamed:@"lufy"];
    UIImage *actionImage = [UIImage imageWithContentsOfFile:path];
    

UIButton

  • 什么是按钮?
    • 还有一个非常重要的UI控件---UIButton,俗称“按钮”
    • 一般情况下,点击某个控件后,会做出相应反应的都是按钮
    • 按钮的功能比较多,既能显示文字,又能显示图片,还能随时调整内部图片和文字的位置
  • UIButton的常见设置
    • 设置按钮的文字
      - (void)setTitle:(NSString *)title forState:(UIControlState)state;
      
    • 设置按钮的文字颜色
        - (void)setTitleColor:(UIColor *)color forState:(UIControlState)state;
        ```
    - 设置按钮内部的小图片
    ```obj
        - (void)setImage:(UIImage *)image forState:(UIControlState)state;
        ```
    - 设置按钮的背景图片
    ```obj
        - (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state;
        ```
    - 设置按钮的文字字体(需要拿到按钮内部的label来设置)
    ```obj
        btn.titleLabel.font = [UIFont systemFontOfSize:13];
        ```
    

Storyboard到代码的转换

点我啊.png
// 创建一个自定义的按钮
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
// 默认状态的背景
[btn setBackgroundImage:[UIImage imageNamed:@"btn_01"] forState:UIControlStateNormal];
// 默认状态的文字
[btn setTitle:@"点我啊" forState:UIControlStateNormal];
// 默认状态的文字颜色
[btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];

课堂小语法点

  • 不能直接修改:OC对象的结构体属性的成员
  • 下面的写法是错误的
imageView.frame.size = imageView.image.size;
  • 正确写法
CGRect tempFrame = imageView.frame;
tempFrame.size = imageView.image.size;
imageView.frame = tempFrame;

修改frame的3种方式

  • 直接使用CGRectMake函数
imageView.frame = CGRectMake(100, 100, 200, 200);
  • 利用临时结构体变量
CGRect tempFrame = imageView.frame;
tempFrame.origin.x = 100;
tempFrame.origin.y = 100;
tempFrame.size.width = 200;
tempFrame.size.height = 200;
imageView.frame = tempFrame;
  • 使用大括号{}形式
imageView.frame = (CGRect){{100, 100}, {200, 200}};
  • 抽取重复代码

    • 将相同代码放到一个新的方法中
    • 不用的东西就变成方法的参数
  • 图片的加载方式

    • 有缓存
    UIImage *image = [UIImage imageNamed:@"图片名"];
    
      - 使用场合:图片比较小、使用频率较高
      - 建议把需要缓存的图片直接放到Images.xcassets
    
    • 无缓存
    NSString *file = [[NSBundle mainBundle] pathForResource:@"图片名" ofType:@"图片的扩展名"];
    UIImage *image = [UIImage imageWithContentsOfFile:@"图片文件的全路径"];
    
      - 使用场合:图片比较大、使用频率较小
      - 不需要缓存的图片不能放在Images.xcassets
    
    • 放在Images.xcassets里面的图片,只能通过图片名去加载图片
  • 什么是NSBundle?

    • 怎么找创建的程序包内容


      查看主目录.png
mainBundle.png
  • 延迟做一些事情
[abc performSelector:@selector(stand:) withObject:@"123" afterDelay:10];
// 10s后自动调用abc的stand:方法,并且传递@"123"参数
  • 音频文件的简单播放
// 创建一个音频文件的URL(URL就是文件路径对象)
NSURL *url = [[NSBundle mainBundle] URLForResource:@"音频文件名" withExtension:@"音频文件的扩展名"];
// 创建播放器
self.player = [AVPlayer playerWithURL:url];
// 播放
[self.player play];
  • 优秀的封装代码
    - (void)settingData{
    // 设置数据
    self.descLabel.text = [NSString stringWithFormat:@"当前第%zd张,总共%zd张", self.currentIndex, kMaxIndex];
    self.imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%zd", self.currentIndex]];
    

}
```

音乐播放器

音乐
音乐
  • 要点一:毛玻璃效果
    • 代码实现
    // 1.1 创建毛玻璃
    UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:self.bgImageView.bounds];
    toolBar.barStyle = UIBarStyleBlack;
    //添加工具条到要实现毛玻璃效果的容器中
    [self.bgImageView addSubview:toolBar];
       ```
    - 注意:在storyboard中ImageView无法添加子控件,而代码可以实现这个功能。
    
  • 要点二:音乐播放
    • 代码实现
      • 首先要导入<AVFoundation/AVFoundation.h>头文件
      // 1.2 创建播放器
      
    NSString *path = [[NSBundle mainBundle] pathForResource:@"mySong1.mp3" ofType:nil];
    NSURL *url = [NSURL fileURLWithPath:path];
    AVPlayerItem *playerItem = [[AVPlayerItem alloc] initWithURL:url];
    self.player = [[AVPlayer alloc] initWithPlayerItem:playerItem];
    //播放音乐
    [self.player play];
    ```
    - 另一种播放音乐代码是添加音频文件的URL,此前已经提到,这里就不详述了。

关于内存管理

  • 批量图片加载可使用无缓存加载
  • 图片对象使用完及时释放
  • 通过懒加载方式加载使用的图片
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容