面试题一(自定义UIScrollView)
2017-09-22 本文已影响8人
追逐_chase
assign和weak的区别
weak
-
解释weak
weak:弱指针,不会让引用计数+1,如果指向的对象被销毁,指针会自动清空 -
使用场景
在ARC的情况下 一般都是使用weak
assgin
- 解释weak
assgin:不会让引用计数器+1,如果指向的对象被销毁,指针不会自动清空
用 __unsafe_unretained:不安全 - 使用场景
在MRC的情况下 一般都是使用assgin 非对象
bounds和frame的区别
共同点是描述一块区域的
bounds
- 解释bounds
bounds:描述的是可视范围在内容的区域
修改bounds的本质是修改内容的原点
frame
- 解释frame
frame:描述的是可视范围
利用bounds属性自己写一个UIScrolloView
#import "ViewController.h"
@interface ViewController ()<UIScrollViewDelegate>
/**自定义ScrolloView*/
@property (nonatomic, weak) UIView *coustonScrolloView;
@end
//1.定义一个customScrolloView
UIView * customScrolloView = [[UIView alloc] initWithFrame:self.view.bounds];
coustonScrolloView.backgroundColor = [UIColor redColor];
self.coustonScrolloView = coustonScrolloView;
[self.view addSubview: customScrolloView];
//2.添加一个平移手势
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];
[coustonScrolloView addGestureRecognizer:pan];
//3.在自定义的 customScrolloView上添加一个 子控件
UISwitch *switchF = [[UISwitch alloc] init];
[customScrolloView addSubview:switchF];
//实现平移方法
- (void)pan:(UIPanGestureRecognizer *)pan {
CGPoint tarnP = [pan translationInView:pan.view];
CGRect bounce = self.coustonScrolloView.bounds;
bounce.origin.y -= tarnP.y;
self.coustonScrolloView.bounds = bounce;
NSLog(@"%@",NSStringFromCGRect(self.coustonScrolloView.bounds));
//复位 始终保持在上一次平移的基础上的操作
[pan setTranslation:CGPointZero inView:pan.view];
}
效果图:
自定义ScrolloView.gif