UI基础(三)之模型、KVC的理解和使用方式

未完待续.....

本来想偷个懒,省去OC 加强的部分,直接从UI开始写博客,但后来发现,OC 加强很多知识点自己并没有搞清楚,只能打破计划把前面的写完了..唉..要疯啊!!!

溜达一圈还是回来了,OC基础搞完了,加强内存管理,还要不断完善,这就得通过各种面试题求虐了.

1.KVC和KVO

Cocoa:苹果的面向对象开发框架,用来生成 Mac OS X 的应用程序。主要的开发语言为 Objective-c, 一个c 的超集。(就是用来开发苹果系统上的应用程序的框架)

 注意:

在KVC中会遇到字典转模型的问题,模型类中会出现一个重写构造方法,里面有个小知识点会产生一些小迷惑,即self = [super init];

为什么要写这一步并且判断呢?

我们知道init方法是模型类的父类NSObject中的方法,之所以让父类初始化是和内存管理相关,什么意思呢,就是说子类继承父类拥有父类所有的属性和方法,init方法就是初始化用的,也就是给属性初始化赋值用的,子类继承自父类,子类要想进行初始化必须要进行完全的初始化,即子类中的所有成员属性必须完成init初始化,所以这些成员属性就是子类新的属性加上父类中的成员属性,而子类重写构造方法的目的就是为了给子类中新的属性赋初值的,但其继承自父类的属性也要初始化一下的,否则就不能完成初始化.

 2.UIScrollView

知识点一:三个属性:contentSize,contentInset,contentOffset

contentSize代表滚动范围

//  如果以后开发的时候,哪个方向不需要滚动可以直接设置为0

    self.scrollView.contentSize = CGSizeMake(0,0);

contentInset代表拖拽回弹的最终位置的设置

contentOffset代表scrollview内部控件的偏移量

contentOffset是哪个点???
首先从字面理解:内容偏移
我可是查了词典的!!!
对于contentOffset有的时候我们会产生错误理解。 我不想在这里介绍错误的理解避免不必要的混淆。

我们什么时候会遇到contentOffset???
更多的时候是在滚动试图中,我们可以通过它结合代理实现一些方法。

比如轮播(我会在下一篇介绍轮播的实现原理至于代码如果需要我可整理出来) 那么请让我通过图片演示来解释contentOffset。

图一中绿色为屏幕也就是最大的显示范围也是滚动视图的frame,红色为滚动试图的contentSize。

我们可以把两个框理解为两个View。那么得出的结果就是两个View的左上顶点重合,这时的contentOffset为{0,0}。

图二中我们把红色向左平移100,也就相当于我们向左滚动了100.
这样产生的结果就是contentOffset为{100,0}.

 

知识点二:缩放

按住option可以实现对scrollview的缩放

步骤是:

#import "ViewController.h"

@interface ViewController ()<UIScrollViewDelegate>
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
@property (weak, nonatomic) IBOutlet UIImageView *imageView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    //1.先实现滚动
    self.scrollView.contentSize = CGSizeMake(self.imageView.bounds.size.width, self.imageView.bounds.size.height);
    //2.实现缩放第一步,设置代理对象
    self.scrollView.delegate = self;
    //3.设置缩放比例
    self.scrollView.maximumZoomScale = 1.5;
    self.scrollView.minimumZoomScale = 0.1;
}
//4.实现代理方法
- (nullable UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{
    return self.imageView;
}

滚动的几个代理方法学习:

#pragma mark -- 需要掌握的代理方法
/**
 *  scrollView在滚动的过程中做的事情 只要滚动界面就会调用
 */
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
  

    NSLog(@"scrollView正在滚动 %@ ",  NSStringFromCGPoint(scrollView.contentOffset));

}

/**
 *  scrollView开始滚动的方法
 *  只会调用一次,手指按上去的时候不会触发,只有开始滚动拖动的时候才会触发
 */
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{

    NSLog(@"开始滚动");

}

/**
 *  scrollView停止滚动的方法
 *  只会调用一次,手指停止移动的时候不会触发,只有当手指离开的时候才会触发
 *
 */
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
    
    // 0 --> NO 非0 YES
    NSLog(@"停止滚动 %d",decelerate);


}

#pragma mark -- 了解
//如果慢慢对屏幕滚动的时候,这个时候停止是不会触发的
//只有当在屏幕快速滑动,这个时候手指离开屏幕 scrollView依然在滚动,在这种情况下,scrollView停止滚动的时候才会触发
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
    //输出调用的是哪个方法

    NSLog(@"%s",__func__);

}

知识点二:无限图片轮播器:

 

posted @ 2016-10-17 15:12  忆缘晨风  阅读(264)  评论(0编辑  收藏  举报