WKCScrollView 0.3.6

WKCScrollView 0.3.6

yang666 维护。



  • 作者:
  • WeiKunChao

WKCScrollView

Carthage compatible CocoaPods compatible License: MIT

WKCScrollView 用作什么?

  1. WKCScrollView 是基于 UIScrollView 的视图,其原理类似于 UITableView。它只加载允许矩形内的子视图,并有一个 viewsPool 来存储可见视图。
  2. 它很容易初始化卡片视图,无论是水平还是垂直方向。同时,它也可以居中对齐,只需设置属性 isAlignmentCenterYES
  3. 当您将属性 loopEnabled 设置为 YES 时,可以在循环模式中滚动。同样,当属性 pagingEnabled 设置为 YES 时,可以进行分页。
  4. 它具有属性 isAutoScroll,当其为 Yes 时,WKCScrollView 将自动滚动。同样,您可以轻松设置间隔和滚动方向。在这种情况下,也可以实现新闻滚动。

WKCScrollView 的主要原理是什么?

如上所述,重点是它的缓存。子视图是基于观察边缘视图的出现和消失来加载的。当子视图加载时,它也被添加到 viewsPool 中。当子视图释放时,它从 SuperView 和 viewsPool 中删除。

如何使用 WKCScrollView?

与 UITableView 使用相同。例如:#import <WKCScrollView/WKCScrollView.h>

  1. 当您初始化 WKCScrollView 时,您应该注册类的类型。
_scrollView = [[WKCScrollView alloc] initWithFrame:CGRectMake(0, 200, 375, 300)];
_scrollView.backgroundColor = [UIColor whiteColor];
[_scrollView registerClass:[UIImageView class] forItemReuseIdentifier:@"view"];
[_scrollView registerClass:[UIImageView class] forItemReuseIdentifier:@"new"];
  1. 您需要将delegatedataSource设置到您控制器或其他您想使用的对象上,并符合其协议。
_scrollView.dataSource = self;
_scrollView.delegate = self;
@interface WKCCommunityViewController ()<WKCScrollViewDelegate,WKCScrollViewDataSource>
  1. 需要的三种方法的作用是设置数字、大小和已加载视图。
- (NSInteger)numberOfViewsInWKCScrollView:(WKCScrollView *)scrollview;
- (CGSize)WKCScrollViewItemSize:(WKCScrollView *)scrollview;
- (__kindof UIView *)WKCScrollView:(WKCScrollView *)scrollview viewAtIndex:(NSInteger)index;

WKCScrollView:viewAtIndex:方法中,你可以使用另一个方法dequeueReusableItemWithIdentifier:来获取已注册的视图。

UIImageView *view = [scrollview dequeueReusableItemWithIdentifier:@"view"];

此外,你可以在不同的index中设置不同的视图。

if (index == 0) {
      UIImageView *view = [scrollview dequeueReusableItemWithIdentifier:@"view"];
      view.contentMode = UIViewContentModeScaleAspectFill;
      view.backgroundColor = [UIColor yellowColor];
      view.layer.cornerRadius = 8;
      view.layer.masksToBounds = YES;
      return view;
   }else {
      UIImageView *view = [scrollview dequeueReusableItemWithIdentifier:@"new"];       view.backgroundColor = [UIColor redColor];
     view.contentMode = UIViewContentModeScaleAspectFill;
     view.image = [UIImage imageNamed:self.dataSource[index]];
     view.clipsToBounds = YES;
     return view;
}
  1. 当您的dataSource重新加载视图时。
 [self.scrollView reloadData];
  1. 更有方便的是,有两个可选方法设置类似于UICollectionView的间距。
- (CGFloat)interitemSpacingInWKCScrollView:(WKCScrollView *)scrollview {
return 20;
}

- (CGFloat)lineSpacingInWKCScrollView:(WKCScrollView *)scrollview {
return 25;
}
  1. 你可以使用额外的方法,例如selectedItem。
- (void)WKCScrollViewDidScroll:(WKCScrollView *)scrollView contentOffset:(CGPoint)offset;
- (void)WKCScrollViewWillBeginDragging:(WKCScrollView *)scrollView;
- (void)WKCScrollViewDidEndDragging:(WKCScrollView *)scrollView willDecelerate:(BOOL)decelerate;
- (void)WKCScrollViewWillBeginDecelerating:(WKCScrollView *)scrollView;
- (void)WKCScrollViewDidEndDecelerating:(WKCScrollView *)scrollView;
- (void)WKCScrollViewDidScrollToTop:(WKCScrollView *)scrollView;
- (void)WKCScrollView:(WKCScrollView *)scrollView didSelectItemAtIndex:(NSInteger)index;

在这种情况下,你已经设置了视图。

  • 当设置属性isAlignmentCenterYES时。

Alt text.

  • 当设置属性loopEnabledYES时。

Alt text.

  • 当设置属性pagingEnabledYES时。

Alt text.

  • 当设置属性isAutoScrollYES时。

Alt text.

  • 当设置不同的autoScrollDirection时。
  _scrollView.autoScrollDirection = WKCScrollViewAutoScrollDirectionRight;

Alt text.

  • 当设置[_scrollView setPagingEnabled:YES isAnimated:YES];时,默认缩放为1.2。

Alt text.

为了方便,它有一个WKCPageControlView可以用作与WKCScrollView相同的用途。

#import <WKCScrollView/WKCPageControlView.h>

以下是一些属性。有三种对齐方式。

typedef NS_ENUM(NSInteger,WKCPageControlViewPageAlignment) {
WKCPageControlViewPageAlignmentCenter, //居中
WKCPageControlViewPageAlignmentLeft, //左
WKCPageControlViewPageAlignmentRight //靠右
};
@property (nonatomic, weak) id<WKCPageControlViewDataSource> dataSource;
@property (nonatomic, assign) WKCPageControlViewPageAlignment alignment;
@property (nonatomic, strong) UIImage * backgroundImage;
@property (nonatomic, assign) NSInteger numberOfItem;
@property (nonatomic, assign) CGSize currentItemSize;
@property (nonatomic, assign) CGSize extraItemSize;
@property (nonatomic, assign) CGFloat itemSpacing;
@property (nonatomic, assign) CGFloat edgeSpaing;
@property (nonatomic, assign) NSInteger currentIndex;

但不同的是,它只有dataSource来设置视图,没有回调的方法。您可以在currentextra中设置不同的视图。

- (NSInteger)numberOfViewsInWKCPageControlView:(WKCPageControlView *)pageControlView;
- (__kindof UIView *)WKCPageControlViewForCurrentItem:(WKCPageControlView *)pageControlView;
- (__kindof UIView *)WKCPageControlViewForExtraItem:(WKCPageControlView *)pageControlView;
  1. setUp
- (WKCPageControlView *)pageControlView {
    if (!_pageControlView) {
       _pageControlView = [[WKCPageControlView alloc] initWithFrame:CGRectMake(0, 500, 375, 60)];
       _pageControlView.dataSource = self;
       _pageControlView.currentItemSize = CGSizeMake(50, 50);
       _pageControlView.extraItemSize = CGSizeMake(30, 30);
       _pageControlView.itemSpacing = 8;
       _pageControlView.edgeSpaing = 15;
       _pageControlView.alignment = WKCPageControlViewPageAlignmentCenter;
      _pageControlView.backgroundColor = [UIColor greenColor];
  }
    return _pageControlView;
}
  1. dataSource回调
- (NSInteger)numberOfViewsInWKCPageControlView:(WKCPageControlView *)pageControlView {
     return self.dataSource.count;
}

- (UIView *)WKCPageControlViewForCurrentItem:(WKCPageControlView *)pageControlView {
     UIView *view = [UIView new];
     view.backgroundColor = [UIColor redColor];
     return view;
}

- (UIView *)WKCPageControlViewForExtraItem:(WKCPageControlView *)pageControlView {
     UIView *view = [UIView new];
     view.backgroundColor = [UIColor grayColor];
     return view;
}
  1. 根据您的WKCScrollView设置CurrentIndex
- (void)WKCScrollViewDidEndDecelerating:(WKCScrollView *)scrollView {
    [self.pageControlView setCurrentIndex:scrollView.currentIndex];
}

Alt text.