• 自己封装的轮播工具


    近期闲来无事,刚好自己封装了一个轮播的demo,能够实现设置时间间隔,是否轮播。是否显示indicator等。使用的时候直接设置參数就能够了,再也不用那么的麻烦了。

    以下结合代码来阐述一下自己的思路吧。首先有两种模式,能够自己主动播放和不自己主动播放两种模式。

    -(void)configureScrollPlayer{
    
        [self backToOriginStatus];
    
        if (automaticScroll) {
    
            [self configureWithAutomaticScroll];
    
        }else{
    
            [self configureWithNoAutomaticScroll];
    
        }
    
    }

    自己主动播放的时候,自己加入了一个定时器,来循环的播放,另外在自己主动播放的时候还能够滑动来实现切换页面,可是曾经做的时候这个问题是没有注意到的,后来发现两者会有冲突。总感觉用手滑动的时候效果很的堵塞。不是那么的流畅,细致分析了一下,发现时定时器出发的滚动和用手拖拽实现的滚动同一时候触发了。造成了这种现象。我在这里优先用户用手拖拽的效果。

    由于用户拖拽的话。肯定是想高速的看到自己想看的东西。


    在这里我在UIScrollview的代理方法里加了一个标签开关。isUserDragged =YES;

    - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
    
    [timer invalidate];
        isUserDragged =YES;
    
    
    }
    
    
    - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{
        float playerWidth =mainScroll.frame.size.width;
        float lastTargetOffset =pageIndex *playerWidth;
        NSInteger page =(targetContentOffset->x - lastTargetOffset)/playerWidth;
        pageIndex+=page;
    
    //    NSLog(@"pageIndex((((((((((((( %ld",(long)pageIndex);
    //    NSLog(@"pageIndex((((((((((((( %ld",(long)pageIndex);
    
        UIButton *button =(UIButton *)[self viewWithTag:(101+pageIndex)];
    
        [self pageIndicatorClicked:button];
    
           timer =[NSTimer scheduledTimerWithTimeInterval:scrollTimeInterval target:self selector:@selector(run) userInfo:nil repeats:YES];
    
    
    }
    
    

    当run方法被触发时。默认用户没有拖拽。isUserDragged =NO;

    -(void)run{
    
    
                isUserDragged =NO;
    
            pageIndex++;
    
            UIButton *button =(UIButton *)[self viewWithTag:(100+pageIndex)];
            [self pageIndicatorClicked:button];
    
            if (pageIndex==[dataArr count]) {
                pageIndex=0;
    
    
            }
    
    
        NSLog(@"**pageIndex******%d*********",(int)pageIndex);
    
    
    }
    

    这种话,事实上有两种模式,定时器轮播,用户手动切换页面。


    以下来看看动画效果吧
    这里写图片描写叙述

    demo下载地址例如以下:
    demo

  • 相关阅读:
    04_数字信号滤波Matlab代码_常见操作
    03_FIR滤波器的设计
    CH340 USB to TTL connect to STM32F207 TTL UART
    linux内核中如果内存越界破坏了semphore同样会导致RCU STALL
    Build自己的kernel header
    事实证明,PHY Identify在外部电路异常情况下也是会发生变化的。
    vim配置参考
    技术经典图书(附电子版下载地址)
    转:linux内核源代码分析方法
    定期保存2017-04-19
  • 原文地址:https://www.cnblogs.com/jhcelue/p/7047619.html
Copyright © 2020-2023  润新知