IOS开发基础—通过Tom猫实例学习uiimageview的基本使用

作者声明

因个人能力问题,文中不免会有错误之处,欢迎各位读者交流,批评,指正。

摘要

通过一个实例:Tom猫(没有声音)来学习uiimageview的基本使用。

实例

viewController h代码

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@property (weak, nonatomic) IBOutlet UIImageView *Tom;

- (IBAction)butClick:(UIButton *)sender;

@end

viewController m代码

//
//  ViewController.m
//  Tom猫
//
//  Created by dqw on 15/5/8.
//  Copyright (c) 2015年 itcast. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

{
    // 定义多个方法使用的变量。
    NSDictionary *_imageCounts;
}
@end

@implementation ViewController

#pragma mark 1. 加载plist里面的图片个数。
- (void)viewDidLoad {

    [super viewDidLoad];

    // 提取每种动作的图片个数。
    NSBundle *bundle = [NSBundle mainBundle];

#pragma mark [bundle path...]的一个小知识点。
    // 注意这样的表达也是可以的。
    NSString *path = [bundle pathForResource:@"Image Count.plist" ofType:nil];

    _imageCounts = [NSDictionary dictionaryWithContentsOfFile:path];
}

#pragma mark 定义动画播放方法。
- (void)playAnimation:(NSString*)AnimationName :(int)Duration
{
    // 如果当前正在进行动画,则不进行其它操作。
    if ([_Tom isAnimating])return;

#pragma mark 注意点1: 初始化。
    NSMutableArray *images = [NSMutableArray array];

    for (int i = 0; i < [_imageCounts[AnimationName] intValue]; i++) {

#pragma mark 重点1:图片名字0x的格式。
        NSString *imageName = [NSString stringWithFormat:@"%@_%02d.jpg", AnimationName, i];

#pragma mark 重点2:关于图片的内存存放位置
        // 第一种方法,图片被调用以此后就存放在缓存中,缓存也属于内存,这样在程序的运行过程中会占用大量内存。
        // 第二中方法,图片使用完后就被释放掉了,所以测内存的时候,可以看到内存的使用量不会随着点击的次数而增大。
        // 但是,视频中,老师的实例占用内存也就是2 3M的样子,我的实例内存都达到100duoM.
#pragma mark 疑问1:运行时的内存和视频中老师的相差很大??
//        UIImage *image = [UIImage imageNamed:imageName];
//        
//        [images addObject:image];

        NSBundle *bundle = [NSBundle mainBundle];

        NSString *path = [bundle pathForResource:imageName ofType:nil];

        UIImage *image = [UIImage imageWithContentsOfFile:path];

        [images addObject:image];

    }

    // 设置动画。
    _Tom.animationImages = images;

    _Tom.animationDuration = Duration;

    _Tom.animationRepeatCount = 1;

    [_Tom startAnimating];

}

- (IBAction)butClick:(UIButton *)sender {

#pragma mark 注意点2: 初始化。
//    这样的尝试说明基础掌握的不扎实,没必要创建字符串实例的,只需要顶一个指针即可。
//    NSString *temp = [[NSString alloc]init];
//    NSString *animationName = [NSString stringWithString:[sender titleForState:UIControlStateNormal]];

    NSString *animationName = [sender titleForState:UIControlStateNormal];

    int imageCount = [_imageCounts[animationName] intValue];

    NSLog(@"%@", [sender titleForState:UIControlStateNormal]);

    int duration = 0.1 * imageCount;

    [self playAnimation:animationName :duration];


}
@end

重点 难点 注意点

  1. uiimageview的两种加载图片方法,一个存在缓存,一个用完即释放。※
  2. bundle得到文件路径的一个小知识点: NSString *path = [bundle pathForResource:imageName ofType:nil];
  3. 类似01 35这样的图片名字的字符串表达方法。
  4. 用到变量的初始化,要不要alloc init。

疑问

  1. 运行时的内存和老师的实例相比大了很多?
  2. image count plist 里面,只有字典元素的value让选择类型,而key则没有,难道其key默认是string类型么?

待完善的内容

  1. uiimageview动画相关拓展。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值