1.使用代码创建控件

========================================

OC开发中,Storyboard中的所有操作都可以通过代码实现,程序员一定要熟练掌握代码布局界面的能力!

 

使用代码创建控件的步骤如下:

 

1> 使用控件对应类创建对象

2> 设置对象属性:frame\color\text\image\backgroundImage……

3> [self.view addSubview:btn];将控件添加到视图

 

设置控件监听方法的示例代码如下:

[btn addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside];

 

提示:

1> addTarget方法定义在UIControl类中,这意味着可以给所有继承自UIControl类的对象添加监听方法

2> 监听方法的第一个参数就是对象本身

3> 监听方法的第二个参数是监听控件的事件

 

2. viewDidLoad

========================================

viewDidLoad是视图加载完成后调用的方法,通常在此方法中执行视图控制器的初始化工作

 

viewDidLoad方法中,一定不要忘记调用父类的方法实现!

[super viewDidLoad];

 

3.手码懒加载创建控件的步骤

========================================

1> 定义控件属性,注意:属性必须是strong的,示例代码如下:

@property (nonatomic, strong) UIImageView *icon;

2> 在属性的getter方法中实现懒加载,示例代码如下:

- (UIImageView *)icon

{

    if (!_icon) {

        // 计算位置参数

        CGFloat imageW = 200;

        CGFloat imageX = (320 - imageW) / 2;

        CGFloat imageH = 200;

        CGFloat imageY = 80;

        // 实例化图像视图

        _icon = [[UIImageView alloc] initWithFrame:CGRectMake(imageX, imageY, imageW, imageH)];

        // 将图像视图添加到主视图

        [self.view addSubview:_icon];

    }

    return _icon;

}

 

使用懒加载的好处:

1> 不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强

2> 每个控件的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性强,松耦合

 

3. 使用Plist文件

========================================

使用Plist文件的目的:将数据与代码分离

 

加载方法:

NSString *path = [[NSBundle mainBundle] pathForResource:@"ImageData" ofType:@"plist"];

_imageList = [NSArray arrayWithContentsOfFile:path];

提示:通常在方法中出现File字眼,通常需要传递文件的全路径作为参数

 

====================================================================================

 

1. Images.xcassets中的素材

========================================

1只支持png格式的图片

2图片只支持[UIImage imageNamed]的方式实例化,但是不能从Bundle中加载

3在编译时,Images.xcassets中的所有文件会被打包为Assets.car的文件

 

2. UIImageView的序列帧动画

========================================

// 0. 是否正在动画

[self.tom isAnimating];

// 1. 设置图片的数组

[self.tom setAnimationImages:arrayM];

// 2. 设置动画时长,默认每秒播放30张图片

[self.tom setAnimationDuration:arrayM.count * 0.075];

// 3. 设置动画重复次数,默认为0,无限循环

[self.tom setAnimationRepeatCount:1];

// 4. 开始动画

[self.tom startAnimating];

// 5. 动画播放完成后,清空动画数组

[self.tom performSelector:@selector(setAnimationImages:) withObject:nil afterDelay:self.tom.animationDuration];

 

3. UIImage imageNamed

========================================

在图片使用完成后,不会直接被释放掉,具体释放时间由系统决定,适用于图片小,常用的图像处理

 

如果要释放快速释放图片,可以使用[UIImage imageWithContentsOfFile:path]实例化图像

 

4.方法重构的策略

========================================

1> 将具有共性的代码复制到一个新的方法

2> 根据不同的调用情况,增加方法的参数

 

提示:在写程序时不要着急重构,有时候把代码先写出来,更容易看清楚如何重构才会更好!

 

5. Bundle中的图片素材

========================================

往项目中拖拽素材时,通常选择

 

1> Destination: 勾选

2> Folders:

    选择第一项:黄色文件夹

        Xcode中分文件夹,Bundle中所有所在都在同一个文件夹下,因此,不能出现文件重名的情况

        特点:

        *** 可以直接使用[NSBundle mainBundle]作为资源路径,效率高!

        *** 可以使用[UIImage imageNamed:]加载图像

 

    选择第二项:蓝色文件夹

        Xcode中分文件夹,Bundle中同样分文件夹,因此,可以出现文件重名的情况

        特点:

        *** 需要在[NSBundle mainBundle]的基础上拼接实际的路径,效率较差!

        *** 不能使用[UIImage imageNamed:]加载图像

 

6.文件管理

========================================

[NSFileManager defaultManager]

 

常用方法

1> 判断文件是否存在

- (BOOL)fileExistsAtPath:(NSString *)path;

2> 将文件从源路径复制到目标路径

- (BOOL)copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error;

3> 删除文件

- (BOOL)removeItemAtPath:(NSString *)path error:(NSError **)error;

4> 返回指定路径中的文件列表

- (NSArray *)contentsOfDirectoryAtPath:(NSString *)path error:(NSError **)error ;

 

 posted on 2014-05-21 18:59  zhao yan  阅读(274)  评论(0编辑  收藏  举报