美文网首页
iOS 中字体垂直滚动

iOS 中字体垂直滚动

作者: 忆往不纠 | 来源:发表于2018-05-08 00:37 被阅读0次

    iOS 中字体垂直滚动

    1.实现思路:

    1>.准备一个scrollView中

    2>.动态创建一组buttons或label(注意:本篇文章用button实现)

    3>.将一组button动态创建加入到一个 容器的containterView

    4>.将容器的containterView加入到scrollView中

    5>.动态计算一个scrollView种contentoffset 当滚动到最后一个时候,将containterView中frame更改到要显示的位置

    6>.NStimer或是perform实现无限滚动(注意:这片文章用NStimer) 废话不说了直接上代码

    2. 代码 

    在.m文件中实现

    @interface ViewController ()

    @property (weak, nonatomic) IBOutlet UIScrollView *scrollMessageView;

    @property (weak, nonatomic) IBOutlet UIView *vectorView;

    @property (strong, nonatomic) UIView *containterView;

    @property (strong, nonatomic) NSArray *models;

    @property (strong, nonatomic) NSString *linkingUrl;

    @property (nonatomic,strong) NSTimer *timer;

    @end

    #pragma mark - Private method

    - (void)updateMessageWithGroupRestModels:(NSArray *)models {

        self.models = models;

        CGFloat buttonX = 0.0;

        CGFloat buttonY = 0.0;

        for (int i = 0;i

            NSString *model = models[i];

            buttonY = i *kDefaltVectorViewH;

            UIButton *messgaeButton = [[UIButton alloc]initWithFrame:CGRectMake(buttonX,buttonY,kDefaltVectorViewW,kDefaltVectorViewH)];

    //使用button表方便处理处理点击事件

            messgaeButton.tag = i;

            [messgaeButtonsetTitleColor:[UIColor redColor] forState:UIControlStateNormal];

            [messgaeButton.titleLabel setFont:[UIFont systemFontOfSize:15.0]];

            [messgaeButtonaddTarget:self action:@selector(userDidClickMessageButton:) forControlEvents:UIControlEventTouchUpInside];

            messgaeButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;

            [messgaeButtonsetTitle:model forState:UIControlStateNormal];

            [self.containterView addSubview:messgaeButton];

        }

    }

    #pragma mark - ScrollView method

    - (void)scrollNextMessage {

        [self performSelector:@selector(scrollNextMessage) withObject:self afterDelay:3];

        float currentOffsetY = self.scrollMessageView.contentOffset.y;

        currentOffsetY +=kDefaltVectorViewH;

        NSInteger pageIndex = (currentOffsetY/ (self.models.count * kDefaltVectorViewH));

        if (pageIndex > 0) {

            self.containterView.frame = CGRectMake(0, pageIndex * self.models.count * kDefaltVectorViewH, kDefaltVectorViewH, self.models.count * kDefaltVectorViewH);

        }

        [UIView animateWithDuration:2 animations:^{

            [self.scrollMessageView setContentOffset:CGPointMake(0, currentOffsetY) animated:YES];

        }];

    }

    #pragma mark - Use Actions

    - (void)userDidClickMessageButton:(UIButton*)button {

        NSLog(@"你点击的是第%ld按钮",(long)button.tag);

    }

    #pragma mark - Destroy timer

    // 切记timer 不适用时要销毁 也可以选取 [self performSelector:@selector(scrollNextMessage) withObject:self afterDelay:3]; 这样就避免内存泄漏问题

    - (void)dealloc {

        [self.timer invalidate];

        self.timer = nil;

    }

    @end

    3.代码结束了,讨论一下在我开发的实际项目中遇到问题

        在写这个demo之前,在项目中真实遇到的,自己要自定义一个cell,实现这边文章的一个效果,结果遇到cell 第一次加载时候回出现滚动位置偏移,每次滚动偏移值都会加大,当滚动cell的时候,滚动cell到屏幕外面,再此加载的,滚动正常,不在偏移,后来在自己的思考和小伙伴讨论下,就可我做的项目首页东西特别多,页面相对复杂,CPU超负荷,没有及时计算正确,后来就在这个cell中加一个异步刷新,滚动就正常了,所以数这个iOS里面多线程掌握还是很必要的,有机会我会专门写一篇关于多线程使用文章,自己很少写文章,并不是不愿意分享,因为有时间我都用在学习其他的东西,例如 python开发 人工智能等 ,学无止境,希望这边文章能帮助开发小伙伴,再次也感谢我的小伙伴帮助我一起解决了这个滚动偏移问题,不过这篇文章没有用到

    相关文章

      网友评论

          本文标题:iOS 中字体垂直滚动

          本文链接:https://www.haomeiwen.com/subject/fzovrftx.html