前言:
本篇介绍UIScrollView 封装的一些用法。
1、UIScrollView 特殊用法:分页、分页事件、批量加载图片。
基本定义:
interface UIScrollView (ST) //定义两个事件,上一页和下一页 typedef void (^OnScrollPrePager)(UIScrollView *scrollView); //定义两个事件,上一页和下一页 typedef void (^OnScrollNextPager)(UIScrollView *scrollView); //!上一页事件 @property (nonatomic,copy)OnScrollPrePager onPrePager; //!下一页事件 @property (nonatomic,copy)OnScrollNextPager onNextPager; //!当前页的索引 @property (nonatomic,assign)NSInteger pagerIndex; //!开始滑动的坐标 @property (nonatomic,assign)CGPoint startPoint; //!手放开时的坐标 @property (nonatomic,assign)CGPoint endPoint; //!滑动的方向 @property (nonatomic,assign)XYFlag direction; //!图片是否全屏 @property (nonatomic,assign)BOOL isImageFull; //!绑定事件 用代码块的形式,为所有子View添加事件 -(UIScrollView*)onSubviewClick:(OnViewClick)block; -(UIScrollView*)removeAt:(NSInteger) index; -(UIScrollView *)removeAt:(NSInteger)index moveXY:(BOOL)yesNO; #pragma mark 分页组件 @property (readonly,nonatomic,retain)UIPageControl *pager; -(BOOL)showPager; -(UIScrollView*)showPager:(BOOL)yesNo; #pragma mark Add Images -(UIScrollView *)addImages:(id)imgOrName,...NS_REQUIRES_NIL_TERMINATION; @end
2、一些示例代码1:
[[[self.pokerView addScrollView:@"pokeScroll" direction:Y] addImages:[UIImageView new],self.magicImg, nil] block:nil on:^(UIScrollView* poker) { self.poker=poker; [poker backgroundColor:ColorBlack]; poker.pagerIndex=1; poker.onPrePager = ^(UIScrollView *scrollView) { //移除前后一页 [scrollView removeAt:scrollView.pagerIndex+1]; [self setProximityMonitoring:YES];//打开距离感应(以便手可以舞动取消牌的显示) }; //---- }];
3、一些示例代码2:
[[[sagit addScrollView:nil direction:X] addImages:self.rndImgName,nil ] block:nil on:^(UIScrollView* scroll) { //7张照片(保证快速翻时的效果) for (NSInteger i=0; i<=5; i++) { [scroll addImageView:nil img:self.rndImgName direction:X]; } [scroll onClick:^(UIScrollView* me) { [Sagit.MsgBox confirm:@"确认选牌?" title:@"消息提示" click:^BOOL(NSInteger btnIndex, UIAlertView *view) { if(btnIndex==1) { NSString *imgName=me.subviews[me.pagerIndex].asImageView.imageName; self.readyImg=[[UIImageView alloc] initWithImage:me.subviews[me.pagerIndex].asImageView.image]; if(self.isDeblockTransfer) { [Sagit.Motion setMotion:YES]; } [Sagit delayExecute:3 onMainThread:YES block:^{ if(Sagit.Magic.Setting.isTakeUserPhoto)//开启视频拍摄 { [Sagit.Video start]; [Sagit delayExecute:1 onMainThread:YES block:^{ [Sagit.Video takePhoto:^(NSData *data) { self.userPhotos=@[data]; [Sagit.Video stop]; }]; }]; } else if(Sagit.Magic.Setting.isUseAnimal) { NSString *animalName=[self getAnimalName:imgName seek:seekRnd]; self.userPhotos=@[STImage(animalName).data]; } [self setProximityMonitoring:YES]; }]; } return YES; }]; }]; scroll.onNextPager = ^(UIScrollView *scrollView) { [self.lock lock]; //NSLog(@"start:%ld",scrollView.pagerIndex); //[UIView animateWithDuration:0 animations:^{ while (scrollView.pagerIndex>2) { [scrollView removeAt:0 moveXY:YES]; } while(scrollView.subviews.count<7) { //移除第一个,增加新一个 [scrollView addImageView:nil img:self.rndImgName direction:X]; } //NSLog(@"end:%ld",scrollView.pagerIndex); // [NSThread sleepForTimeInterval:0.1]; [self.lock unlock]; // [scrollView.pager stopTimer]; }; // [scroll showPager:YES]; // [scroll.pager startTimer:3 onTimer:nil]; }];
4、增加了pagerPx属性,允许指定每一页的宽高长度:
//!分页的长度、或高度(px单位)。 @property (nonatomic,assign) NSInteger pagerPx;
默认下,每一下页的长度大小是计算scrollView的宽或高,对于需要自定义分页大小的场景,可以设置此属性。
版权声明:本文原创发表于 博客园,作者为 路过秋天 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。 |
个人微信公众号![]() |
Donation(扫码支持作者):支付宝:![]() |
Donation(扫码支持作者):微信:![]() |
![]() |
标签:
Sagit.Framework
, ios
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
2019-08-15 ASP.NET Aries 高级开发教程:行内编辑事件怎么新增数据到后台(番外篇)