查找了网上资料,循环效果绝大部分都是增加行数来制造循环的错觉,延时滚动就是利用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 关于伪造循环效果和延时滚动效果的更多相关文章

  1. IOS UIScrollView + UIButton 实现segemet页面和顶部标签页水平滚动效果

    很长一段时间没有写博客了,最近在学习iOS开发,看了不少的代码,自己用UIScrollView和UIButton实现了水平滚动的效果,有点类似于今日头条的主界面框架,效果如下: 代码如下: MyScr ...

  2. [ios]利用alertView 插入数据都数据库。笔记

    利用alertView 插入数据都数据库 -(void)addItemToList { UIAlertView *alter=[[UIAlertViewalloc]initWithTitle:@&qu ...

  3. [IOS]Swift 遍历预制的本地资源文件

    我事先放了一堆svg文件,但是我是批量使用的,想要直接遍历他们加入到一个list中来,那我直接就遍历他们的名称,把他们的名字组成一个array. var ss:NSString = NSBundle. ...

  4. [ios]关于用FMDB 操作数据库 删除 tableView 后刷新

    刚了解使用fmdb,从数据库获取数据 绑定到一个可变数组classNameItems //从ClassList表取得数据 FMResultSet *classInfo=[db executeQuery ...

  5. 代码规范[iOS]

    一.文件系统 二.代码结构 三.常量  宏 四.布局方式  数据持久化 五.网络 六.类目.延展 七.内存.线程 八.其他 九.版本控制.上线相关 十.附录1(公共库) 十一.附录2(公共类目) 十二 ...

  6. [ios]quartz2d画板功功能实现核心代码

    //触摸开始 -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ //    1,获取对 ...

  7. iOS10收集IDFA,植入第三方广告[终结]--ADMob

    [PS: 前段时间,公司做ASO推广,需要在应用中收集IDFA值,跟广告平台做交互!于是有了这个需求--] 1.首先,考虑了一下情况(自己懒 -_-#),就直接在首页上写了一个Banner,循环加载广 ...

  8. Java基础 之软引用、弱引用、虚引用 &#183;[转载]

    Java基础 之软引用.弱引用.虚引用 ·[转载] 2011-11-24 14:43:41 Java基础 之软引用.弱引用.虚引用 浏览(509)|评论(1)   交流分类:Java|笔记分类: Ja ...

  9. 给iOS开发新手送点福利,简述文本属性Attributes的用法

    给iOS开发新手送点福利,简述文本属性Attributes的用法   文本属性Attributes 1.NSKernAttributeName: @10 调整字句 kerning 字句调整 2.NSF ...

随机推荐

  1. Hibernate中的锁机制

    锁机制:是数据库为了保证数据的一致性<一个事务的各种操作不相互影响>而使各种共享资源在被并发访问访问变得有序所设计的一种规则,用来保证在当前用户进行操作数据的时候其他的用户不能对同一数据进 ...

  2. Sphinx在windows上的安装使用

    Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索, 它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索. Sphinx特别为一 ...

  3. VisualSVN SERVER的安装和使用

    SVN Server安装 Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说.下载的网址是:http://subversion.apache.org/packages. ...

  4. css3选择器二

    在HTML中,通过各种各样的属性可以给元素增加很多附加的信息,了解和掌握css3一些的选择器,是很有必要的. :enabled 和 :disabled选择器表单元素有可用(“:enabled”)和不可 ...

  5. mind nerverr later(转)

    每个人都有感到失落迷惘的时候.人生用专制又霸道的方式运行着,每当我们心想一切尘埃落定.生活稳固的时候,生活总爱给我们惊喜,粉碎我们短暂的安逸,让我们不得不重新思考—_— “我走对路了吗?” “我能够赚 ...

  6. DevExpress XtraGrid如何使单元格只读?

    -----------------------------从别人那里copy来的-------------------------------------------------- 1.   设置Gr ...

  7. 记一场与 cookie 的相遇

    简介: cookie 翻译过来为 “小甜点,一种酥性甜饼干,很美味的...”,咳咳,打住!我们这里说的是 “甜点” 文件,它是浏览器储存在用户电脑上的一小段纯文本格式的文件. 由于 http 是一种无 ...

  8. 对八皇后的补充以及自己解决2n皇后问题代码

    有了上次的八皇后的基础.这次准备解决2n皇后的问题,: //问题描述// 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行./ ...

  9. Python初学总结

    下边的总结都是在python3上 一.基础 1.输出与输入: 输出:print(变量/字符串) 输入:input() 返回的是字符串 price=input() print(price) 2.pyth ...

  10. mysql查询今天、昨天、近7天、近30天、本月、上一月的SQL语句

    mysql查询今天.昨天.近7天.近30天.本月.上一月的SQL语句 这篇文章主要介绍了mysql查询今天.昨天.近7天.近30天.本月.上一月的SQL语句,一般在一些统计报表中比较常用这个时间段,需 ...