暑假第一周学习内容-ZARA仿写

news2024/9/23 5:33:38

仿写ZARA总结

文章目录

  • 仿写ZARA总结
    • 前言
    • 无限轮播图
    • 分栏控制器与UIScrollView
      • UIScorllView的协议部分
      • UISegmentedControl的协议部分
    • 自定义cell

前言

本文主要是用来总结仿写ZARA中遇到的一些问题,以及ZARA中学习到的一些新知识。

无限轮播图

这里我们先给出无限轮播图的效果图。

请添加图片描述

在ZARA的首页中我们要实现一个自动无限轮播图,这部分内容的无限轮播图根据他的名字可以看出他有两个重点,一个是怎么实现一个无限轮播,我们先讲一下有关无限轮播图的内容。无限轮播图并不是意味着他是无限张图片,而是通过相关的代码实现一个无限轮播的效果,我通过按下面的方式摆放我们的图片,这时候我们的UISCrollVIew通过底层相关代码来实现我们的无限轮播的效果。

在之前的学习过程中我们知道了UIScrollView的一些的协议函数,我们通过一个- (void)scrollViewDidScroll:(UIScrollView *)scrollView这个函数可以获取我们的UIScrollVIew的位置,我们可以在我们的视图滑到倒数第二张照片的后面的时候,我们直接通过这个代码来修改我们的位置,这样就可以实现一个视觉上无限轮播图的效果,在第二张图片的位置我们在向前滑动时候,然后一下子将这个UIScrollView的位置改到倒数第二张的位置,这样我们就可以在视觉上展示出一个无限轮播图的效果。

这里给出我们的相关代码来帮助理解

    self.scrView.pagingEnabled = YES;
    //可以开启滚动的效果
    self.scrView.scrollEnabled = YES;
    self.scrView.showsVerticalScrollIndicator = NO;
    self.scrView.showsHorizontalScrollIndicator = NO;
    for (int i = 0; i <= 5; i++) {
        NSString* str = [NSString stringWithFormat:@"20%d.jpg", (i % 3) + 1]; //这样实现一个按顺序摆放图片
        UIImage* image = [UIImage imageNamed:str];
        UIImageView* iView = [[UIImageView alloc] initWithImage:image];
        if (i == 5) { // 在最后一张图片的情况下我们给他添加到最前面
            iView.frame = 0, [UIScreen mainScreen].bounds.size.height / 4, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height / 1.9);
        } else { // 其他照片正常给他添加
            iView.frame = CGRectMake([UIScreen mainScreen].bounds.size.width * (i + 1), [UIScreen mainScreen].bounds.size.height / 4, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height / 1.9);
        }
        [self.scrView addSubview:iView];
    }
    [self.view addSubview:self.scrView];

然后我们在实现一个相关的协议函数,来处理滑到最后一张图片和第一张图片的两种情况

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGFloat contentOffsetX = scrollView.contentOffset.x;
    CGFloat width = [UIScreen mainScreen].bounds.size.width;
    CGFloat contentWidth = scrollView.contentSize.width;
    
    if (contentOffsetX >= contentWidth - width) { // 滑到倒数第一张图片时候,调整到倒数第二张照片的位置
        [scrollView setContentOffset:CGPointMake(width, 0) animated:NO];
    } else if (contentOffsetX <= 0) { // 滑动到第一张图片的时候在进行一个特判,调整到第一张照片的位置
        [scrollView setContentOffset:CGPointMake(contentWidth - 2 * width, 0) animated:NO];
    } else {
        self.page.currentPage = (contentOffsetX / width) - 1;
    }
}

分栏控制器与UIScrollView

这里我通过两个分栏控制器来实现我们的第二个页面,这个页面的内容比较简单,我们仅仅只用将两个UI控件的协议函数链接起来,我们就可以实现这个部分的内容。

同样我们先给出实现效果

请添加图片描述

这里我们可以看到我们通过分栏控制器和我们的一个UIScrollView来实现一个两个控件的协同。内容较为简单结合代码理解。

UIScorllView的协议部分

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGFloat offsetX = scrollView.contentOffset.x;
    CGFloat width = self.view.frame.size.width;
    NSInteger index = offsetX / width + 0.5;
    if (_segControl.selectedSegmentIndex != index) {
        _segControl.selectedSegmentIndex = index;
    }
}

NSInteger index = offsetX / width + 0.5;这部分代码比较重要,这部分代码可以让我们在滑动到一半的时候自动调整到相应位置

,正如gif中所显示,我们滑到一半的时候上面的分栏控制器就已经改变了。

UISegmentedControl的协议部分

-(void)segmentControlValueChanged {
    NSUInteger index = _segControl.selectedSegmentIndex;
    CGFloat newX = (self.view.bounds.size.width) * index;
    _scroView.contentOffset = CGPointMake(newX, _scroView.contentOffset.y);
}

这部分内容和上面的内容类似,实现两个UI控件的结合。

自定义cell

请添加图片描述

这部分是我的一个自定义cell的内容,我这里主要是实现换头像功能,以及设计自定义cell实现这个效果。

这部分换头像的内容是通过一个照片墙的来实现的,然后在给照片墙上的每一个imageView添加一个手势识别器,然后给手势识别器提供相应的换头像的协议函数,从而解决这部分换头像的函数。

	UITapGestureRecognizer* tap = 	[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(press:)];
	tap.numberOfTapsRequired = 1;
	tap.numberOfTouchesRequired = 1;
	[iView addGestureRecognizer:tap];
 -(void)press:(UIGestureRecognizer*) tap {
    UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"换头像" message:nil preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction* action1 = [UIAlertAction actionWithTitle:@"确认" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        [self.delegate changeImageView:tap.view.tag];
        [self.navigationController popViewControllerAnimated:YES];
    }];
    UIAlertAction* cancel = [UIAlertAction actionWithTitle:@"cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
        ;
    }];
    [alert addAction:cancel];
    [alert addAction:action1];
    [self presentViewController:alert animated:YES completion:nil];
    //[_delegate changeImageView:tap.view.tag];
    //[self.navigationController popViewControllerAnimated:YES];
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1938460.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Boot 学习(10)——固基(Idea 配置 git 访问 gitee)

几转眼就过了两个月&#xff0c;其实也没有闲着&#xff0c;学也学了&#xff0c;只是繁杂事多&#xff0c;学的不如以前多&#xff0c;也没有做过笔记了。 以前做开发因条件受限&#xff0c;没有什么 git &#xff0c;也没有 gitee。现在出来混要跟上形势才行&#xff0c;学习…

C语言程序设计8

程序设计8 问题8_1代码8_1结果8_1 问题8_2代码8_2结果8_2 问题8_3代码8_3结果8_3 问题8_1 函数 f u n fun fun 的功能是&#xff1a;求 s s ss ss 所指字符串数组中长度最短的字符串所在行下标&#xff0c;作为函数值返回&#xff0c;并把其串长放在形参 n n n 所指的变量中…

2024论文精读:利用大语言模型(GPT)增强上下文学习去做关系抽取任务

文章目录 1. 前置知识2. 文章通过什么来引出他要解决的问题3. 作者通过什么提出RE任务存在上面所提出的那几个问题3.1 问题一&#xff1a;ICL检索到的**示范**中实体个关系的相关性很低。3.2 问题二&#xff1a;示范中缺乏解释输入-标签映射导致ICL效果不佳。 4. 作者为了解决上…

【Android】常用基础布局

布局是一种可用于放置很多控件的容器&#xff0c;它可以按照一定的规律调整内部控件的位置&#xff0c;从而编写出精美的界面&#xff0c;布局内不单单可以放控件&#xff0c;也可以嵌套布局&#xff0c;这样可以完成一些复杂的界面&#xff0c;下面就来认识一些常用的布局吧。…

基于Semaphore与CountDownLatch分析AQS共享模式实现

共享模式与独占模式区别在于&#xff1a;共享模式下允许多条线程同时获取锁资源&#xff0c;而在之前分析的独占模式中&#xff0c;在同一时刻只允许一条线程持有锁资源。 一、快速认识Semaphore信号量及实战 Semaphore信号量是java.util.concurrent(JUC)包下的一个并发工具类…

2-40 基于Matlab编写的3维FDTD(时域有限差分算法)计算了球的RCS经典散射问题

基于Matlab编写的3维FDTD(时域有限差分算法)计算了球的RCS经典散射问题&#xff0c;采用PEC作边界&#xff0c;高斯波束激励。程序已调通&#xff0c;可直接运行。 2-40 3维FDTD 时域有限差分算法 - 小红书 (xiaohongshu.com)

机器学习——降维算法PCA和SVD(sklearn)

目录 一、基础认识 1. 介绍 2. 认识 “ 维度 ” &#xff08;1&#xff09;数组和Series &#xff08;2&#xff09;DataFrame 表 &#xff08;3&#xff09;图像 3. 降维思想 4. 降维步骤 二、降维算法&#xff08;PCA&#xff09; 1. PCA实现 &#xff08;1&#…

免费视频批量横版转竖版

简介 视频处理器 v1.3 是一款由是貔貅呀开发的视频编辑和处理工具&#xff0c;提供高效便捷的视频批量横转竖&#xff0c;主要功能&#xff1a; 导入与删除文件&#xff1a;轻松导入多个视频文件&#xff0c;删除不必要的文件。暂停与继续处理&#xff1a;随时暂停和继续处理。…

7-20FPGA调试日志

1. 在代码里面定义的ILA的变量名称与波形抓取界面的不一致 问题描述 ::: 2. 直接从其他的播放声音的平台放音乐没问题&#xff0c;但是从AU里面生成的2kHz的正弦波放不出声音 演示视频链接 好像和ILA的例化信号有关&#xff0c;例化ILA信号的驱动时钟信号频率没有内部的其他…

Redis-应用

目录 应用 缓存雪崩、击穿、穿透和解决办法? 布隆过滤器是怎么工作的? 缓存的数据一致性怎么保证 Redis和Mysql消息一致性 业务一致性要求高怎么办? 数据库与缓存的一致性问题 数据库和缓存的一致性如何保证 如何保证本地缓存和分布式缓存的一致&#xff1f; 如果在…

电脑永久性不小心删除了东西还可以恢复吗 电脑提示永久性删除文件怎么找回 怎么恢复电脑永久删除的数据

永久删除电脑数据的操作&#xff0c;对于很多常用电脑设备的用户来说&#xff0c;可以说时有发生&#xff01;但是&#xff0c;因为这些情况大都发生在不经意间&#xff0c;所以每每让广大用户感觉到十分苦恼。永久删除也有后悔药&#xff0c;轻松找回电脑中误删的文件。恢复文…

Github 2024-07-20 Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2024-07-20统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10TypeScript项目1Rust: 构建可靠高效软件的开源项目 创建周期:5064 天开发语言:Rust协议类型:OtherStar数量:92978 个Fork数量:1…

Win10环境将Docker部署到非系统盘

Win10环境将Docker部署到非系统盘 目录 Win10环境将Docker部署到非系统盘 一、Docker官网客户端Docker Hub下载 二、windows环境的安装 三、正确的迁移步骤 3.1、确保你的系统分区至少3G的剩余空间&#xff1b; 3.2、默认方式安装Docker hub&#xff1b; 3.3、打开Dock…

linux操作系统之线程

1.线程概念 线程是一个轻量级进程,每一个线程都属于一个进程 进程是操作系统资源分配的最小单位,而线程是CPU任务调度的最小单位 线程是一个任务执行的过程,包括创建,调度,消亡 创建:线程空间位于进程空间,进程中的线程,栈区独立,并共享进程中的数据区,文本区,堆区 调度:宏观…

微积分-微分应用2(平均值定理)

要得出平均值定理&#xff0c;我们首先需要以下结果。 罗尔定理 设函数 f f f 满足以下三个假设&#xff1a; f f f 在闭区间 [ a , b ] [a, b] [a,b] 上连续。 f f f 在开区间 ( a , b ) (a, b) (a,b) 上可导。 f ( a ) f ( b ) f(a) f(b) f(a)f(b) 则在开区间 ( a , b …

【手撕数据结构】拿捏双向链表

目录 链表介绍初始化链表销毁链表查找节点打印链表增加节点尾插头插在指定位置之后插入节点 删除节点尾删头删删除指定位置节点 链表判空 链表介绍 前面说到&#xff0c;链表的结构一共有八种&#xff1a;带头单向循环链表、带头单向非循环链表、带头双向循环链表、带头双向非…

绿色算力|暴雨服务器用芯片筑起“十四五”转型新篇章

面对全球气候变化、技术革新以及能源转型的新形势&#xff0c;发展低碳、高效的绿色算力不仅是顺应时代的要求&#xff0c;更是我国建设数字基础设施和展现节能减碳大国担当的重要命题&#xff0c;在此背景下也要求在提升算力规模和性能的同时&#xff0c;积极探索推动算力基础…

计算机网络参考模型与5G协议

目录 OSI七层参考模型OSI模型vsTCP/IP模型TCP/IP协议族的组成 OSI七层参考模型 分层功能应用层网络服务与最终用户的一个接口表示层数据的表示,安全,压缩会话层建立,管理,终止会话传输层定义传输数据的协议端口号,以及流控和差错校验网络层进行逻辑地址寻址,实现不同网路之间的…

泛型新理解

1.创建三个类&#xff0c;并写好对应关系 package com.jmj.gulimall.study;public class People { }package com.jmj.gulimall.study;public class Student extends People{ }package com.jmj.gulimall.study;public class Teacher extends People{ }2.解释一下这三个方法 pub…

麻省理工学院 - MIT - 线性代数学习笔记

学习视频地址 文章目录 1.01方程组的几何解释2.02矩阵消元3.03乘法和逆矩阵乘法逆 4.04矩阵A的LU分解5.05转置&#xff0c;置换&#xff0c;向量空间置换转置向量空间 6.06列空间和零空间7.07求解Ax0&#xff1a;主变量&#xff0c;特解 1.01方程组的几何解释 对于二元方程组&…