• [iOS基础控件


    需求:
    1.点击按钮播放相应动画
    2.点击汤姆猫身体部分(头、脚、尾巴)显示动画
    3.当前正在播放动画不可触发其他动画
    4.优化缓存、内存管理
     
    Image
     
    A.序列帧动画
    #1. png格式的文件可以不带扩展名访问,而且可以放到”Images.scassets”的组中预览,jpg只能放到support file中了,而且访问的时候要写上扩展名
    #2. 在ViewController中的属性栏可以设置storyboard模型的大小
     
    #3. 拖入文件夹的时候要选择“Create Groups"才能正确引用,不要选择”Create Folder References"
         1.Create groups for any added folders:把选择的文件添加到工程的group下,如果你选择的是文件,则把文件夹认为是group。他添加的文件夹对应的工程目录和文件路径不一定是一一对应的。你可以删除文件,可以把这个文件删除在工程外,也可以删除文件对应的本地文件。应该它生成的文件夹是黄色的。
         2.Create folder references for any added folders:这种方法是建立一个文件夹的索引,同时文件夹中的所有文件也会添加到整个工程。他添加的文件夹对应的工程目录和文件路径是一一对应的。你要删除其中的文件的话可以直接到文件目录下把文件删除,然后再刷新一下目录,文件就会被删除了。这样添加文件夹的方法很方便,你在做cocos2d的工程时应该会经常用到。应该他生成的文件夹是蓝色的
     
    #4. 整型占位符的0填充:  %02d代表两位整型,高位不满的用0填充
     
    1.动画执行方法
    1     self.tom.animationImages = images; // 存储了多张组成动画的图片
    2
    3     [self.tom setAnimationRepeatCount:1]; // 默认0是无限次
    4     [self.tom setAnimationDuration: images.count/FramesCount];
    5     [self.tom startAnimating];
     
    2.图片缓存机制&释放内存
    a.使用          UIImage *image = [UIImage imageNamed:fileName];
    会存储图片到混存,加载大量图片的时候会消耗大量内存
    1         // imageNamed: 有缓存
    2 //        UIImage *image = [UIImage imageNamed:fileName];
    3
    4         // imageWithContentOfFile: 没有缓存(传入文件的全路径)
    5         NSBundle *bundle = [NSBundle mainBundle];
    6         NSString *path = [bundle pathForResource:fileName ofType:nil];
    7         UIImage *image = [UIImage imageWithContentsOfFile:path];
     
    b.释放图片内存
        [self.tom performSelector:@selector(setAnimationImages:) withObject:nil afterDelay:self.tom.animationDuration + 1];
     
     
    B.汤姆猫主要代码 (使用storyboard拖曳控件方式)
     
     1 #import "ViewController.h"
     2
     3 #define FramesCount 24 // 动画帧数/秒
     4
     5 @interface ViewController ()
     6 @property (weak, nonatomic) IBOutlet UIImageView *tom;
     7
     8 - (IBAction)drink;
     9 - (IBAction)knockHead;
    10
    11 @end
    12
    13 @implementation ViewController
    14
    15 - (void)viewDidLoad {
    16     [super viewDidLoad];
    17     // Do any additional setup after loading the view, typically from a nib.
    18
    19 }
    20
    21 - (void)didReceiveMemoryWarning {
    22     [super didReceiveMemoryWarning];
    23     // Dispose of any resources that can be recreated.
    24 }
    25
    26 /** 点击牛奶按钮 */
    27 - (IBAction)drink {
    28     [self runAnimationWithName:@"drink" andCount:80];
    29 }
    30
    31 /** 点击头部 */
    32 // 实质是在头部放置了一个不带文字的透明按钮
    33 - (IBAction)knockHead {
    34     [self runAnimationWithName:@"knockout" andCount:80];
    35 }
    36
    37 /** 运行相应动画 */
    38 - (void) runAnimationWithName:(NSString *) animationName andCount:(int) count {
    39     if (self.tom.isAnimating) return;
    40
    41     NSMutableArray *images = [NSMutableArray array];
    42     for (int i=0; i <= count; i++) {
    43         NSString *fileName = [NSString stringWithFormat:@"%@_%02d.jpg", animationName, i];
    44
    45         // imageNamed: 有缓存
    46 //        UIImage *image = [UIImage imageNamed:fileName];
    47
    48         // imageWithContentOfFile: 没有缓存(传入文件的全路径)
    49         NSBundle *bundle = [NSBundle mainBundle];
    50         NSString *path = [bundle pathForResource:fileName ofType:nil];
    51         UIImage *image = [UIImage imageWithContentsOfFile:path];
    52
    53         [images addObject:image];
    54     }
    55
    56     self.tom.animationImages = images; // 存储了多张组成动画的图片
    57
    58     [self.tom setAnimationRepeatCount:1]; // 默认0是无限次
    59     [self.tom setAnimationDuration: images.count/FramesCount];
    60     [self.tom startAnimating];
    61
    62     [self.tom performSelector:@selector(setAnimationImages:) withObject:nil afterDelay:self.tom.animationDuration + 1];
    63 }
    64
    65
    66 @end
     
    C.文档注释
    使用块注释就能在输入代码自动完成的时候显示注释
    /**      */
  • 相关阅读:
    redis接入sentinelPool的配置
    02.Redis主从集群的Sentinel配置
    淘宝大秒系统设计详解
    关于Thread.currentThread()和this的差异
    App开放接口api安全性—Token签名sign的设计与实现
    使用Spring Session做分布式会话管理
    PowerDesigner 15.1 安装步骤详细图解及破解
    解密ThreadLocal
    深入分析 ThreadLocal 内存泄漏问题
    一个经典例子让你彻彻底底理解java回调机制
  • 原文地址:https://www.cnblogs.com/hellovoidworld/p/4119737.html
Copyright © 2020-2023  润新知