[ios]新手笔记-。-UIPickerView 关于伪造循环效果和延时滚动效果
查找了网上资料,循环效果绝大部分都是增加行数来制造循环的错觉,延时滚动就是利用NSTimer间隔出发滚动事件来制造滚动效果。
代码:
#import <UIKit/UIKit.h>
#import "UserEntity.h"
@interface PickerViewController : UIViewController
{
NSTimer *times;
int j;//设置延时滚动的行数
}
@property (retain,nonatomic) UserEntity *userEntity;
@property (strong,nonatomic) NSMutableArray *pickerData;//设置可变数组存放数据
@property (weak, nonatomic) IBOutlet UIPickerView *pickerView;
- (IBAction)backButton:(id)sender;
@end
-------------------------------------------------------------------------------------------------------------------
@implementation PickerViewController
@synthesize pickerView;
@synthesize pickerData;
@synthesize userEntity;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
NSLog(@"min:%d,max:%d",self.userEntity.minNum,self.userEntity.maxNum);
//设置滚动初始位置 等于 扩大行数后的位置(1000/2)
j=500;
int startNum= self.userEntity.minNum;
int endNum =self.userEntity.maxNum;
int value=endNum-startNum;
NSMutableArray *numArray =[NSMutableArray arrayWithCapacity:value+1];
for(int i=startNum;i<=endNum;i++)
{
NSString* str = [NSString stringWithFormat:@"%d",i];
[numArray addObject:str];
}
self.pickerData = numArray;
[pickerView selectRow:1000/2 inComponent:0 animated:NO];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(int)getRandomNumber:(int)from to:(int)to
{
return (int)(from + (arc4random() % (to - from + 1)));
}
- (IBAction)backButton:(id)sender {
[self dismissViewControllerAnimated:YES completion:nil];
}
- (IBAction)selectButton:(id)sender {
times=[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(scollPicker) userInfo:nil repeats:YES];
}
-(void)scollPicker
{
j++;
if(j%100==0)
{
[times invalidate];
times=nil;
int startNum= self.userEntity.minNum;
int endNum =self.userEntity.maxNum;
int value=endNum-startNum;
int getNum = [self getRandomNumber:0 to:1000];
[pickerView selectRow:getNum%value inComponent:0 animated:YES];
[pickerView reloadComponent:0];
NSInteger row = [self.pickerView selectedRowInComponent:0];
NSString *selected = [self.pickerData objectAtIndex:row];
NSString *title=[[NSString alloc] initWithFormat:@"You selected %@!", selected];
UIAlertView *alert=[[UIAlertView alloc] initWithTitle:title message:@"Thanks for choosing." delegate:self cancelButtonTitle:@"You're Welcome" otherButtonTitles:nil,nil];
[alert show];
j=0;
// button.enabled=YES;
}
@implementation PickerViewController
@synthesize pickerView;
@synthesize pickerData;
@synthesize userEntity;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
NSLog(@"min:%d,max:%d",self.userEntity.minNum,self.userEntity.maxNum);
//设置滚动初始位置 等于 扩大行数后的位置(1000/2)
j=500;
获取随机数范围
int startNum= self.userEntity.minNum;
int endNum =self.userEntity.maxNum;
int value=endNum-startNum;
//初始话数组并赋值
NSMutableArray *numArray =[NSMutableArray arrayWithCapacity:value+1];
for(int i=startNum;i<=endNum;i++)
{
NSString* str = [NSString stringWithFormat:@"%d",i];
[numArray addObject:str];
}
//绑定数据
self.pickerData = numArray;
//初始Picker位置
[pickerView selectRow:1000/2 inComponent:0 animated:NO];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
//获取随机数
-(int)getRandomNumber:(int)from to:(int)to
{
return (int)(from + (arc4random() % (to - from + 1)));
}
@implementation PickerViewController
@synthesize pickerView;
@synthesize pickerData;
@synthesize userEntity;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
NSLog(@"min:%d,max:%d",self.userEntity.minNum,self.userEntity.maxNum);
//设置滚动初始位置 等于 扩大行数后的位置(1000/2)
j=500;
获取随机数范围
int startNum= self.userEntity.minNum;
int endNum =self.userEntity.maxNum;
int value=endNum-startNum;
//初始话数组并赋值
NSMutableArray *numArray =[NSMutableArray arrayWithCapacity:value+1];
for(int i=startNum;i<=endNum;i++)
{
NSString* str = [NSString stringWithFormat:@"%d",i];
[numArray addObject:str];
}
//绑定数据
self.pickerData = numArray;
//初始Picker位置
[pickerView selectRow:1000/2 inComponent:0 animated:NO];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
//获取随机数
-(int)getRandomNumber:(int)from to:(int)to
{
return (int)(from + (arc4random() % (to - from + 1)));
}
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
//扩大行数制造循环
return 1000;
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
//求余赋值使扩大后的数与数组值 相同 ,制造循环效果
return [pickerData objectAtIndex:(row%(self.userEntity.maxNum-self.userEntity.minNum+1))];
}
}
else
{for (int i=0; i<3; i++) {
[pickerView selectRow:j inComponent:0 animated:YES];
[pickerView reloadComponent:0];
// button.enabled=NO;
}
}
}
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
return 1000;
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
return [pickerData objectAtIndex:(row%(self.userEntity.maxNum-self.userEntity.minNum+1))];
}
可能有些理解有错,希望求指出指点。
[ios]新手笔记-。-UIPickerView 关于伪造循环效果和延时滚动效果的更多相关文章
- IOS UIScrollView + UIButton 实现segemet页面和顶部标签页水平滚动效果
很长一段时间没有写博客了,最近在学习iOS开发,看了不少的代码,自己用UIScrollView和UIButton实现了水平滚动的效果,有点类似于今日头条的主界面框架,效果如下: 代码如下: MyScr ...
- [ios]利用alertView 插入数据都数据库。笔记
利用alertView 插入数据都数据库 -(void)addItemToList { UIAlertView *alter=[[UIAlertViewalloc]initWithTitle:@&qu ...
- [IOS]Swift 遍历预制的本地资源文件
我事先放了一堆svg文件,但是我是批量使用的,想要直接遍历他们加入到一个list中来,那我直接就遍历他们的名称,把他们的名字组成一个array. var ss:NSString = NSBundle. ...
- [ios]关于用FMDB 操作数据库 删除 tableView 后刷新
刚了解使用fmdb,从数据库获取数据 绑定到一个可变数组classNameItems //从ClassList表取得数据 FMResultSet *classInfo=[db executeQuery ...
- 代码规范[iOS]
一.文件系统 二.代码结构 三.常量 宏 四.布局方式 数据持久化 五.网络 六.类目.延展 七.内存.线程 八.其他 九.版本控制.上线相关 十.附录1(公共库) 十一.附录2(公共类目) 十二 ...
- [ios]quartz2d画板功功能实现核心代码
//触摸开始 -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ // 1,获取对 ...
- iOS10收集IDFA,植入第三方广告[终结]--ADMob
[PS: 前段时间,公司做ASO推广,需要在应用中收集IDFA值,跟广告平台做交互!于是有了这个需求--] 1.首先,考虑了一下情况(自己懒 -_-#),就直接在首页上写了一个Banner,循环加载广 ...
- Java基础 之软引用、弱引用、虚引用 ·[转载]
Java基础 之软引用.弱引用.虚引用 ·[转载] 2011-11-24 14:43:41 Java基础 之软引用.弱引用.虚引用 浏览(509)|评论(1) 交流分类:Java|笔记分类: Ja ...
- 给iOS开发新手送点福利,简述文本属性Attributes的用法
给iOS开发新手送点福利,简述文本属性Attributes的用法 文本属性Attributes 1.NSKernAttributeName: @10 调整字句 kerning 字句调整 2.NSF ...
随机推荐
- Angular2 NgModule
1. 说明 典型的模块是一个内聚的代码块,用来实现某种单一的功能.Angular2应用程序本质上是有一系列模块组成的,而且Angular 本身就是一组模块库.模块主要是导出一些东西——类,函数,值,供 ...
- [原创]用windows7连接windows2003的终端服务器时,出现"由于这台计算机没有远程桌面客户端访问许可证,远程会话被中断"的问题
用windows7连接windows2003的终端服务器时,出现"由于这台计算机没有远程桌面客户端访问许可证,远程会话被中断"的问题,原因是终端服务器授权方式设置为了"每 ...
- gulp整理
gulp基于node 1.全局安装gulp: $ npm install --global gulp 2.前往项目目录,然后安装作为项目的开发依赖(devDependencies): $ npm in ...
- Guidance of Set up FTP Server
Step 1. Create a FTP folder in your C disk, named "FTPReport"(an example) Step 2. Install ...
- Lattice FIFO 使用之FIFO_DC输入输出宽度不同时 的一个注意事项
在使用FIFO_DC的时候,我们知道这个FIFO的一个功能是可以输入输出的数据宽度不一样,比如: 输入数据为128bit,输出数据为16bit,FIFO内部可以实现这样的转换,但是输出的时候是先送出一 ...
- Unity Animation System(动画系统)
动画系统: 支持:动画融合,混合,叠加动画,行走循环的时间同步,动画层,控制动画的各个方面(时间,速度,融合权重) 带有每顶点1.2或4骨骼的蒙皮网格,以及支持基于物理的布娃娃系统和程序动画. ...
- css雪碧图生成工具4.1更新
V4.0介绍地址:http://www.cnblogs.com/wang4517/p/4493917.html 此次更新主要针对已有BUG的修复,用户可在客户端上直接看到更新信息,自己去下载 已修复问 ...
- centos配置虚拟主机
首先注释掉 DocumentRoot /var/www/html 然后添加如下代码至文件底部: NameVirtualHost 192.168.0.3 <virtualhos ...
- 什么是Angularjs
AngularJs(后面就简称ng了)是一个用于设计动态web应用的结构框架.首先,它是一个框架,不是类库,是像EXT一样提供一整套方案用于设计web应用.它不仅仅是一个javascript框架,因为 ...
- JAVABeanUtils
在写如何使用java BeanUlits 之前需要清楚几件事情 1. 我们每次所定义的类,其实是实体,同时也被称作为JavaBean; 2. 为什么我们要使用BeanUlits这个框架 &g ...