ViewScrollView,是什么来的?这个啊,其实很简单的一回事。首先这货是基于 UIScrollView 的,然后前面的 View 是表面把任何 View 类型的对象加载到 UIScrollView 之上,就是这么一回事,很简单吧。
类似的设计,我以前也做过,不过由于技术比较差,所以一直有所局限,以前只能采用按页切换的形式:pagingEnabled = YES,通过采用这个方式,很方便的控制内存,将不需要的页面所释放。然后这次的重写,我突破了自己的限制即时采不采用按页切换的形式也能把多余的不需要的页面所释放掉。根据个人经验,我不断优化了加载效果,要知道,直接基于UIScrollView的,是没有复用的效果,所以自己要绞尽脑汁去处理卡、迟钝的问题,把一个配置Cell的方法拆分成两个,一个是对应运行时所执行的方法,一个是对应停止操作时进行的处理,我一般这个称呼,loadingView,以及 loadedView,如是方式来配置 View,这样的话,只需要考虑到逻辑问题,就能好好的处理卡、迟钝的问题。比如说你加载很多张大图,想必一定会卡、迟钝爆了吧。我也在这个基础上进行测试和优化这个设计的。当你对ViewScrollView进行操作(滑动之类)时,它会调用 loadingView 的方法来执行,当你停止时,则会调用 loadedView 的方法来执行。简单的说,就是 loadingView 方法里面配置缩略图,然后 loadedView 方法才配置大图,这样就很好解决卡、迟钝的方法。
其实最初没有想写这个的,应该来说想学习一下 ViewManager 什么的,然而我好像还是不是太理解怎么实现,释放不了,即时释放了,其实内存还是不释放,多奇葩了,只好先重新实现一下自己古老的设计吧,不过能够突破自己的限制还是一个不错的,不按页切换的形式就能把不需要的页面释放掉,其实是采用了判断视图是否在可视范围内,不在则释放,就是这么简单。想想这个也算(伪)复用吧。
代码部分:
//
// MZCViewScrollView.h
// MZCKit
//
// Created by yococo on 15/11/5.
// Copyright (c) 2015年 yococo. All rights reserved.
//
#import <UIKit/UIKit.h>
@protocol MZCViewScrollViewDataSource;
@protocol MZCViewScrollViewDelegate;
@interface MZCViewScrollView : UIScrollView<UIScrollViewDelegate>
@property(nonatomic,weak) id<MZCViewScrollViewDataSource> mzcDataSource;
@property(nonatomic,weak) id<MZCViewScrollViewDelegate> mzcDelegate;
- (void) reloadData;
@end
@protocol MZCViewScrollViewDataSource <NSObject>
@required
- (NSUInteger) numberOfItemInMZCViewScrollView:(MZCViewScrollView*) viewScrollView;
- (UIView*) mzcViewScrollView:(MZCViewScrollView*) viewScrollView cellAtIndex:(NSUInteger) index;
@optional
- (void) mzcViewScrollView:(MZCViewScrollView*) viewScrollView loadingView:(UIView*) view atIndex:(NSUInteger) index;
- (void) mzcViewScrollView:(MZCViewScrollView*) viewScrollView loadedView:(UIView*) view atIndex:(NSUInteger) index;
@end
@protocol MZCViewScrollViewDelegate <NSObject>
@optional
- (void) mzcViewScrollView:(MZCViewScrollView*) viewScrollView view:(UIView*) view didSelectAtIndex:(NSUInteger) index;
@end
U2FsdGVkX1/eSAKtNQrQcvZxQ07ru0tNzsgticNtPmr6ZeZxfITtDrlotPoOUoWq
XnKAQ8cScthoRe+45D+EBooviSvp481EvDfp17WWUHovgB5o7EA3TZp86sseNCsE
cg63w3OSX1n4OAo9ivcqZ30I05eTdri4L/MOtVWXnA1mLyir8nUnoBGN1LVB36v7
Rk0QZ/zGQOCSNpXb47o3pI8yTIkC35rzoUjdYEz7BvrQbCCx3QrYH2SdlYQVKLVj
AdhuFszbDYiTu2HT/bOxBL9G0fVXC0tH3Ia9o8XN4WXyYOhZTQTcfP0ARnuVOdR8
AK+J5PiZedo2nFhO9kg/+N6aTnX2QG/m5zAO25g4niaFlXxQ8cm1wE/9TazzKN0u
8+paXUN+wTgFAFeMlkhCY2ddVmNM/xUDwxow1LS7mF23rqQAlsn8Un9FJW1ohc1c
90MmUmnkc9fnwiOW+wzZNwEJM65P4fOokvgU2vxaE1NLUP0/Ddrm//NhNFvksTsC
pp/0dLSl65OGSqmmjCKXl5Jp2NILXiV/fOvGYqfJZRPqS97M/8PLlk6mhW/ELwCF
nXFjtzrxDloqzkoz/YPO6zb8mZE41bRSiOmE4ksD6K+giIoqZU412tHlkVYl5XpZ
8JpO3X+n163wlGfC/7H+E2YHGaB3JNObJJEgfxgrhaEYpDOvmKaAyUHttIfaa43R
C/mFWE7bIgOYhU1qiNIWYHNyE4k9ZWdoe