iOS开发脚踏实地学习day05-大图滚动和定时器

本文深入探讨了Swift编程中UIScrollView的使用方法,包括如何通过代理模式监听UITextField事件,实现输入文本框的自动回车跳转,以及解决UIScrollView无法滚动的问题。同时,介绍了懒加载的概念和实现方式,以及iPhone屏幕尺寸、分辨率及其适配策略。文章还详细解释了UIScrollView的常见属性及其用途,最后讨论了NSTimer与CADisplayLink在定时任务中的应用区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1.代理和协议

监听那些不能使用addTargetd监听的事件

比如说UITextField没有addTarget来监听,那么就要使用代理来实现

1>添加上<UITextFieldDelegate>,父类(控制器)称为子类(文本框)的代理

@interface ViewController () <UITextFieldDelegate>

2>使用协议的方法

实现代理,就要遵守协议(利用智能提示,快速编写代码),实现协议的方法。

以下是当按return后,处理什么事件

-(BOOL)textFieldShouldReturn:(UITextField *)textField

二者的关系:

代理,就是把需要做的事交给别人来处理,这是一种关系;

协议,是这种关系要遵守的内容,内容里有很多方法,编写代码就能实现具体的协议方法。



2.UITextField控件,改变光标所在控件,关闭键盘

 [self.pwd becomeFirstResponder];
[self.pwd endEditing:YES];

3. 懒加载,
懒加载的好处:
1> 不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强

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

3>只有当真正需要资源时,再去加载,节省了内存资源。

常见的有,代码创建控制器的View的时候,在属性的getter方法里实现懒加载。千万不能在getter方法里写"self.",否则会陷入死循环,程序奔溃的。


4.UIScrollView无法滚动的解决方法

1>*****没有设置contentSize;
self.scrollView.contentSize = CGSizeMake(892, 632);


2>scrollEnabled = NO;


3>没有接收到触摸事件 userinteractionEnabled = NO;


4>*****没有取消autolayout功能,(如果在storyboard中添加了scrollview的子控件),要想让scrollView滚动,必须取消autolayer功能。(用代码的方法添加scrollView控件,就可以勾选上autolayer)


5.iPhone屏幕尺寸、分辨率及适配

原文http://blog.youkuaiyun.com/phunxm/article/details/42174937

1.iPhone尺寸规格

设备

iPhone

Width

Height

对角线

Diagonal

逻辑分辨率(point)

Scale Factor

设备分辨率(pixel)

PPI

3GS

2.4 inches (62.1 mm)

4.5 inches (115.5 mm)

3.5-inch

 

320x480

@1x

320x480

163

4(s)

2.31 inches (58.6 mm)

4.5 inches (115.2 mm)

3.5-inch

320x480

@2x

640x960

326

5c

2.33 inches (59.2 mm)

4.90 inches (124.4 mm)

4-inch

320x568

@2x

640x1136

326

5(s)

2.31 inches (58.6 mm)

4.87 inches (123.8 mm)

4-inch

320x568

@2x

640x1136

326

6

2.64 inches (67.0 mm)

5.44 inches (138.1 mm)

4.7-inch

375x667

@2x

750x1334

326

6+

3.06 inches (77.8 mm)

6.22 inches (158.1 mm)

5.5-inch

414x736

@3x

(1242x2208->)

1080x1920

401 



6.UIScrollView的常见属性

参考http://www.cnblogs.com/wendingding/p/3754210.html

contentSize是指内容显示的宽高,滚动的范围;

View的frame的宽高就是指能看到的范围,在storyboard上拖得控件的大小,就像一个窗户一样,屋里的内容可以随视线移动而移动,但是窗户不动,它限制了能看到的范围;

contentOffset是表示UIScrollView滚动的位置;//是UIScrollView相对frame左顶点的位置

contentInset是指UIScrollView的4周增加额外的滚动区域。contentSize之前设置间距inset,会根据间距自动调整contentOffset,就不用人为设置offset

重要说明

(1)UIScrollView的frame与contentsize属性的区分:UIScrollView的frame指的是这个scrollview的可视范围(可看见的区域),contentsize是其滚动范围。

(2)contentinset(不带*号的一般不是结构体就是枚举),为UIScrollView增加额外的滚动区域。(上,左,下,右)逆时针。contentinset可以使用代码或者是视图控制器进行设置,但两者有区别(注意区分)。

(3)contentsize属性只能使用代码设置。

(4)contentoffset是个CGpoint类型的结构体,用来记录ScrollView的滚动位置,即记录着“框”跑到了哪里。知道了这个属性,就知道了其位置,可以通过设置这个属性来控制这个“框”的移动。

(5)不允许直接修改某个对象内部结构体属性的成员,三个步骤(先拿到值,修改之,再把修改后的值赋回去)。

7.setter

//setter方法,系统加载了Main.storyboard后,给scrollView对象进行赋值(在viewDidLoad之前进行)
-(void)setScrollView:(UIScrollView *)scrollView{
    _scrollView = scrollView;
    //在contentSize之前设置间距inset,会根据间距自动调整contentOffset,就不用人为设置offset了
    self.scrollView.contentInset = UIEdgeInsetsMake(64, 0, 0, 0);
    self.scrollView.contentSize = CGSizeMake(0, 600);
    NSLog(@"%s",__func__);
}


8.NSTimer准确么?如果不准去,怎么办?
NSTimer通常用来有一定事件跨度的周期性时间处理。

不准确,用CADisplayLink(每秒60次刷新)


9.runLoop运行循环

http://www.cocoachina.com/ios/20150601/11970.html



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值