使用iCarousel的旋转木马效果请求图片

简介:

使用iCarousel的旋转木马效果请求图片

https://github.com/nicklockwood/iCarousel

先看看效果:

 

 

源码如下:

//
//  RootViewController.m
//
//  Created by YouXianMing on 14-5-16.
//  Copyright (c) 2014年 Y.X. All rights reserved.
//

#import "RootViewController.h"
#import "iCarousel.h"
#import "YXJSON.h"
#import "YXGCD.h"
#import "SDWebImage.h"

// 数据源
#define SOURCE_DATA @"http://www.duitang.com/album/1733789/masn/p/0/50/"

@interface RootViewController ()<iCarouselDataSource, iCarouselDelegate>

@property (nonatomic, strong) iCarousel      *carousel;   // iCarousel
@property (nonatomic, strong) NSMutableArray *dataArray;  // 数据源

@end

@implementation RootViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    // 初始化数据源
    _dataArray = [[NSMutableArray alloc] init];
    
    // 初始化iCarousel
    self.carousel = [[iCarousel alloc] initWithFrame:self.view.bounds];
    [self.view addSubview:_carousel];
    _carousel.backgroundColor = [UIColor blackColor];
    _carousel.type = iCarouselTypeWheel;
    
    // 设置代理
    self.carousel.delegate   = self;
    self.carousel.dataSource = self;
    
    
    // 异步加载数据
    [[GCDQueue globalQueue] execute:^{
        // 获取json数据
        NSData *data = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:SOURCE_DATA]];
        
        // 转换为字典
        NSDictionary *dataDic = [YXJSON dictionaryOrArrayWithJSONSData:data];
        if (dataDic)
        {
            NSArray *dataArray = dataDic[@"data"][@"blogs"];
            for (NSDictionary *dic in dataArray)
            {
                NSLog(@"%@", dic[@"isrc"]);
                
                // 存储数据
                [_dataArray addObject:dic[@"isrc"]];
            }
        }
        
        // 主线程更新
        [[GCDQueue mainQueue] execute:^{
            
            // 重新加载carousel
            [_carousel reloadData];
        }];
    }];
}

#pragma mark -
#pragma mark iCarousel methods
- (NSUInteger)numberOfItemsInCarousel:(iCarousel *)carousel
{
    // 元素个数
    return [_dataArray count];
}

- (UIView *)carousel:(iCarousel *)carousel
  viewForItemAtIndex:(NSUInteger)index      // view的标志
         reusingView:(UIView *)view         // 重用的view
{
    if (view == nil)
    {
        view = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 300.0f, 400.0f)];
    }
    
    // 强行转换指针
    UIImageView *pointView = (UIImageView *)view;
    
    // 使用SDWebImage异步下载图片
    [pointView setImageWithURL:[NSURL URLWithString:_dataArray[index]]];
    
    // 图片自动适应
    pointView.contentMode = UIViewContentModeScaleAspectFit;
    
    return view;
}

- (CGFloat)carousel:(iCarousel *)carousel
     valueForOption:(iCarouselOption)option
        withDefault:(CGFloat)value
{
    if (option == iCarouselOptionSpacing)
    {
        return value * 1.1f;
    }
    
    return value;
}

@end

RootViewController.m

以下几个地方使用了本人自己封装的类,不开源,看官请自行替换相关方法-_-!

核心的地方如下:

so easy :)

 

 

问:如何实现view的点击事件?

实现协议方法 - (void)carousel:(iCarousel *)carousel didSelectItemAtIndex:(NSInteger)index; 即可

 

问:如何获取偏移量?

实现协议,然后如下使用

- (void)carouselDidScroll:(iCarousel *)carousel
{
    NSLog(@"scrollOffset %f", carousel.scrollOffset);
}

 

目录
相关文章
|
23天前
|
存储 Linux API
OpenClaw长效记忆解决方案:阿里云/MacOS/Linux/Windows部署指南+Ontology技能一键安装实操
在OpenClaw(Clawdbot)的日常使用中,绝大多数用户都会遇到相同的问题:刚刚告知助手的任务、信息、偏好、日程安排,间隔不久再次询问,系统便完全遗忘,只能反复重复相同内容,效率大幅降低。传统的对话式记忆仅能临时缓存文本内容,无法对信息进行结构化存储、关联梳理与长期保留,这也是AI助手使用一段时间后出现响应混乱、逻辑缺失、记忆丢失的核心原因。想要让OpenClaw真正成为可长期协作的智能助手,就必须为其搭建具备实体关联、逻辑梳理、持久存储的**结构化记忆大脑**。Ontology技能正是解决这一问题的核心组件,它无需调用额外API、不依赖第三方服务,通过一行命令即可完成安装,让Open
772 0
|
2月前
|
人工智能 监控 机器人
2026年零门槛部署 OpenClaw(Clawdbot)接入A股数据,实现24小时股票分析保姆级教程
在AI赋能金融分析的浪潮中,OpenClaw(原Clawdbot/Moltbot)凭借开源灵活的架构,成为个人投资者打造专属智能分析助手的首选。通过接入A股实时数据,它能实现24小时市场监控、涨跌预警、潜力股推荐等核心功能,彻底解放人工盯盘的繁琐。而阿里云的稳定部署环境,更让这套系统实现全天候不间断运行,成为真正的“金融AI助手”。 本文基于OpenClaw v2026.1.25稳定版与QVeris免费A股数据接口,详细拆解阿里云OpenClaw部署步骤、A股数据接入流程、高级分析功能配置及多平台联动技巧,所有代码命令均可直接复制复用,即使无技术基础也能在1小时内完成从部署到实战的全流程。
8710 12
|
23天前
|
存储 人工智能 定位技术
一些 Harness Engineering 的实践
Harness Engineering 是AI智能体时代的新型工程范式,核心是为Agent构建可靠环境而非优化模型。OpenAI、Anthropic、LangChain等实践表明:通过结构化知识库、双重智能体架构、组件化Harness设计及自动化反馈回路,可提升Agent在长周期、大规模任务中的稳定性与自主性。
4261 4
|
2月前
|
人工智能 监控 机器人
股票终极赚钱尽头是AI Agent?阿里云1分钟集成OpenClaw Skills自动选股系统,让AI成为你的私人股票分析师
对于忙碌的上班族而言,研究个股、跟踪行情、筛选潜力股是件耗时耗力的事。过去,量化分析、实时行情监测是机构专属的“特权”,而现在借助OpenClaw的自动化能力+实时金融数据API,普通个人也能在10分钟内搭建专属AI选股系统——每日自动筛选5支潜在涨幅超5%的潜力股,生成专业盘前报告,还能通过QQ随时随地查询行情,无需复杂代码与量化背景,让AI成为你的私人股票分析师。
1645 3
|
8月前
|
监控 供应链 数据可视化
深入聊聊MES、ERP、SCM、WMS、APS、SCADA、PLM、QMS的区别与联系
在企业信息化数字化进程中,ERP、MES、SCM、WMS等系统发挥着关键作用。本文详解各系统功能、应用场景及相互关系,帮助企业构建高效协同的数字化管理体系。
|
开发框架 移动开发 Dart
Flutter 框架的缺点
以上缺点并不意味着 Flutter 框架不优秀,只是在使用过程中需要开发者根据具体的项目需求和场景,充分考虑这些因素,并采取相应的措施来克服或缓解这些问题,以充分发挥 Flutter 的优势,开发出高质量的移动应用。
|
XML JSON API
常用iOS的第三方框架
图像:1.图片浏览控件MWPhotoBrowser       实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存。可对图片进行缩放等操作。      下载:https://github.com/mwaterfall/MWPhotoBrowser目前比较活跃的社区仍旧是Github,除此以外也有一些不错的库散落在Goog
8026 0
|
计算机视觉
【YOLOv10改进-损失函数】Shape-IoU:考虑边框形状与尺度的指标
YOLO目标检测专栏探讨了边框回归损失的创新方法,强调了目标形状和尺度对结果的影响。提出的新方法Shape-IoU关注边框自身属性,通过聚焦形状和尺度提高回归精度。实验显示,该方法提升了检测效果,超越现有技术,在多个任务中达到SOTA。论文和代码已公开。
|
Swift iOS开发
iOS 13 之后自定义 Window 不显示解决 (SceneDelegate)
iOS 13 之后自定义 Window 不显示解决 (SceneDelegate)
649 0
|
存储 C语言 Perl
为什么要使用交叉引用?西门子S7-200 SMART的交叉引用表、字节使用表、位使用表如何操作?
本篇我们来学习西门子S7-200 SMART的交叉引用表、字节使用表、位使用表如何操作。首先我们先来看为什么要使用交叉引用:通过交叉引用窗口可以查看程序中参数赋值和存储器使用情况,避免重复赋值。
为什么要使用交叉引用?西门子S7-200 SMART的交叉引用表、字节使用表、位使用表如何操作?

热门文章

最新文章