这个旋转木马(跑马灯)效果的图片展示Demo,包括设定旋转方向,图片倒影,背景设置,旋转速度,开始结束,点击显示选中的图片,彩色的块展示等等功能

效果图:(源码下载:https://github.com/hbblzjy/OC-CarrouselDemo)

部分代码展示:

- (void)testCarrouselView
{
    NSMutableArray *array = [NSMutableArray array];
    for (NSInteger i = 0; i < 8; i ++)
    {
        UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"mm%ld.jpeg", (long)i]];
        [array addObject:image];
    }
    LYCarrouselView *carr = [[LYCarrouselView alloc] initWithFrame:CGRectMake(20, 80, 280, 160) images:array callback:^(NSInteger index, NSInteger event) {
        
        NSLog(@"%ld %@", index, event == 1 ? @"点击" : @"长按");
    }];
    [carr addImage:[UIImage imageNamed:@"mm8.jpeg"]];
    carr.backgroundColor = [UIColor blackColor];
    carr.animationSpeed = 2;
    carr.showReflectLayer = YES;
    [self.view addSubview:carr];
    
    UIButton *start = [UIButton buttonWithType:UIButtonTypeCustom];
    [start setFrame:CGRectMake(40, 260, 100, 48)];
    [start setTitle:@"开始" forState:UIControlStateNormal];
    [start setBackgroundColor:[UIColor blueColor]];
    [start handleControlEvents:UIControlEventTouchUpInside withBlock:^(UIControlEvents events) {
        
        //默认为向左,如果暂停了,修改方向,开始向右
        [carr startRotateRight:YES];
    }];
    [self.view addSubview:start];
    
    
    UIButton *stop = [UIButton buttonWithType:UIButtonTypeCustom];
    [stop setFrame:CGRectMake(180, 260, 100, 48)];
    [stop setTitle:@"停止" forState:UIControlStateNormal];
    [stop setBackgroundColor:[UIColor blueColor]];
    [stop handleControlEvents:UIControlEventTouchUpInside withBlock:^(UIControlEvents events) {
        
        [carr stopRotate];
    }];
    [self.view addSubview:stop];
    
    LYSlider *slopex = [[LYSlider alloc] initWithWidth:280 center:CGPointMake(self.view.bounds.size.width / 2, self.view.bounds.size.height - 120) horizontal:YES];
    [self.view addSubview:slopex];
    slopex.thumbcolor = [UIColor magentaColor];
    slopex.gradientBackInfo = [self sliderBackGraidentInfo];
    slopex.value = 2 / 6.0;
    [slopex handleSliderAction:UIControlEventValueChanged callback:^(LYSlider *slider, UIControlEvents event) {
        
        carr.animationSpeed = slider.value * 6;
    }];
}
视图.h文件内容:
- (NSDictionary *)sliderBackGraidentInfo
{
    return @{@"locations" : @[@(0),
                              @(60 / 360.),
                              @(120 / 360.),
                              @(180 / 360.),
                              @(240 / 360.),
                              @(300 / 360.),
                              @(1)],
             @"colors" : @[[UIColor redColor],
                           [UIColor yellowColor],
                           [UIColor greenColor],
                           [UIColor cyanColor],
                           [UIColor blueColor],
                           [UIColor magentaColor],
                           [UIColor redColor]]};
}

// index: view/image tag;   event:(1 tap, 2 long press)
typedef void(^CarrouselBlock)(NSInteger index, NSInteger event);

// 旋转木马
@interface LYCarrouselView : UIView

@property (nonatomic, assign) BOOL canAutoRotate;// 自动动画开关
@property (nonatomic, assign) CGFloat sensitivity;// 滑动灵敏度 默认为1 越大越灵敏 0无效 正负影响方向
@property (nonatomic, assign) NSTimeInterval minimumPressTime;// 长按最短时间 超过则视为长按 默认为0.4
@property (nonatomic, assign) CGFloat animationSpeed;//默认为3.0 转过一张图时间

@property (nonatomic, assign) BOOL showReflectLayer;//是否显示倒影层

- (LYCarrouselView *)initWithFrame:(CGRect)frame images:(NSArray *)images callback:(CarrouselBlock)block;

- (void)addImage:(UIImage *)image;

- (void)startRotateRight:(BOOL)right; // 开始动画 (right:是否向右) canAutoRotate=YES
- (void)stopRotate; //停止动画 canAutoRotate=NO

OC基础之推荐一个旋转木马(跑马灯)效果的图片展示Demo的更多相关文章

  1. JS写一个列表跑马灯效果--基于touchslide.js

    先放上效果图: 类似于这样的,在列表中循环添加背景样式的跑马灯效果. 准备引入JS插件: <script type="text/javascript" src="x ...

  2. jQuery 3D canvas 旋转木马(跑马灯)效果插件 - cloud carousel

    插件名称-cloud carousel 最新版本-1.0.5 支持ie6-ie9,firefox,chrome,opera,safari等 1.引入jquery1.4.2.js 和CloudCarou ...

  3. flex 简单跑马灯效果(竖着显示)

    <mx:Move id="move_area" target="{VBox_AreaWarning}"/> //move效果,模拟跑马灯 <s ...

  4. Android学习总结——TextView跑马灯效果

    Android系统中TextView实现跑马灯效果,必须具备以下几个条件: 1.android:ellipsize="marquee" 2.TextView必须单行显示,即内容必须 ...

  5. 【Android】TextView跑马灯效果

    老规矩,先上图看效果. 说明 TextView的跑马灯效果也就是指当你只想让TextView单行显示,可是文本内容却又超过一行时,自动从左往右慢慢滑动显示的效果就叫跑马灯效果. 其实,TextView ...

  6. Android界面(1) 使用TextView实现跑马灯效果

    方法一:(只能实现单个TextView的跑马灯效果)在TextView添加以下控件 android:singleLine="true"只能单行,超出的文字显示为"...& ...

  7. TextView的跑马灯效果实现

    TextView的跑马灯效果实现 问题描述 当文字内容过长,但是只允许显示一行时,可以将文字显示为跑马灯效果,即文字滚动显示. 代码实现 第一种方法实现 先查询TextView控件的属性,得到以下信息 ...

  8. Android使用TextView实现跑马灯效果(自定义控件)

    对于一个长的TetxView 折行显示是一个很好的办法,另一种方法就是跑马灯显示(单行滚动) 1.折行显示的长TextView <LinearLayout xmlns:android=" ...

  9. JavaScript小实例-文字跑马灯效果

    我们常常能看到显示屏上字体的滚动以及手机弹幕等,下面所示代码就是一个简易的文字跑马灯的效果: <!DOCTYPE html> <html> <head lang=&quo ...

随机推荐

  1. c语言文件中关于while(!feof(fp)) 循环多输出一次的问题

      文件中关于while(!feof(fp)) 循环多输出一次的问题   feof(fp)有两个返回值:如果遇到文件结束,函数feof(fp)的值为1,否则为0.   当读到文件末尾时,文件指针并没有 ...

  2. POJ-1700 Crossing River---过河问题(贪心)

    题目链接: https://vjudge.net/problem/POJ-1700 题目大意: 有N个人要渡河,但是只有一艘船,船上每次最多只能载两个人,渡河的速度由两个人中较慢的那个决定,小船来回载 ...

  3. win10 apache配置虚拟主机后localhost无法使用

    win10系统配置虚拟主机1.用记事本或Sublime Text打开httpd.confctrl + f 搜索httpd-vhosts.conf 将#Include conf/extra/httpd- ...

  4. append()/extend()/insert()/remove()/del/pop()/slice列表分片

    member = ['小甲鱼', 88, '黑夜', 90, '迷途', 85, '怡静', 90, '秋舞斜阳', 88] member.append('字符串')#在列表结尾处增加字符串 memb ...

  5. java内部类、接口、集合框架、泛型、工具类、实现类

    .t1 { background-color: #ff8080; width: 1100px; height: 40px } 一.内部类 1.成员内部类. (1)成员内部类的实例化: 外部类名.内部类 ...

  6. JavaScript 随机数相关算法

    // Math.ceil() 返回大于等于数字参数的最小整数(取整函数),对数字进行上舍入 // Math.floor() 返回小于等于数字参数的最大整数,对数字进行下舍入 // Math.round ...

  7. 【python进阶】详解元类及其应用1

    前言 元类在python中是很重要的一部分,我将分两次去讲解元类及其应用,此篇为详解元类及其应用第一篇,下面开始今天的说明~~~ 1. 类也是对象 在⼤多数编程语⾔中,类就是⼀组⽤来描述如何⽣成⼀个对 ...

  8. .NET Core 从 Github到 Nuget 持续集成、部署

    一.前言 Nuget 作为一个.NET研发人员,我想你都不会陌生,他为我们提供非常方便的程序包管理,不管是版本,还是包的依赖都能轻松应对,可以说是我们的好助手.而 Nuget 除了官方nuget.or ...

  9. Python系列 - optparse

    我们知道sys.argv[] 可以获得命令行参数 同样,optparse 对此提供了更为强大的功能. import optparse class ArgvHandler(object): def __ ...

  10. [Luogu 1730]最小密度路径

    Description 给出一张有N个点M条边的加权有向无环图,接下来有Q个询问,每个询问包括2个节点X和Y,要求算出从X到Y的一条路径,使得密度最小(密度的定义为,路径上边的权值和除以边的数量). ...