美文网首页iOS开发
面试题一(自定义UIScrollView)

面试题一(自定义UIScrollView)

作者: 追逐_chase | 来源:发表于2017-09-22 14:18 被阅读8次

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

相关文章

网友评论

    本文标题:面试题一(自定义UIScrollView)

    本文链接:https://www.haomeiwen.com/subject/xdftextx.html