【iOS】App仿写--3GShare

news2024/12/28 18:32:59

文章目录

  • 前言
  • 一、账号界面
  • 二、主页界面
  • 二、搜索界面
  • 三、文章界面
  • 四、活动界面
  • 五、我的界面
  • 总结


前言

这周写了3GShare的demo,这是一个十分麻烦的demo,比网易云需要设计的知识更多,特此撰写一下博客记录总结

一、账号界面

在这里插入图片描述

这里账号界面主要用到的就是协议传值的方式,我们在弹出的注册页面创造的账号密码会传回我们的登录界面。但是这里要注意一点:当我们注册成功账号后,我们再次进入注册页面,那么先前注册界面存储账号密码的数组会被delloc掉,那么就造成了我们无法判断账户名是否被重复注册,这里给出两个解决方法:

  • 将先前注册界面传给登录界面的数组再次回传注册界面
  • 用strong对注册界面进行修饰,使其在弹出时不被销毁

    • 第一种方法其实很简单,只需要用到普通的属性传值加以判断即可
    • 第二种方法就是将我们的视图设置为我们的属性,用strong修饰在这里插入图片描述

这样一来我们的界面没有被销毁,我们储存在其中的数组也没有被释放掉,就实现了我们判断账号是否被重复注册的需求


在这里需要着重注意的一点就是我们不能在登录时在遍历账号密码数组的循环中添加显示Alert弹窗(警告框)功能,而需要先判断账号密码是否符合,再去显示弹窗。
这样做的原因是如果我们在遍历账号密码数组的循环中添加显示Alert弹窗(警告框)功能,在弹出一个alertController的时候,第二个alertController是无法弹出的,这就导致了如果第一对账号密码都不符合,即使后面的正确也不会弹出登录成功的弹窗

二、主页界面

在这里插入图片描述
这个界面很简单,用到的有轮播图以及自定义cell


  • 轮播图
    这里注意我的轮播图在我不动时会自动进行滚动,这里是因为我使用了定时器的原因。
    这里我实现的代码原理是当我滑动轮播图时定时器会自动停止,停止拖动轮播图时,如果之前的定时器已经停止,则重新创建定时器并开始自动滚动
    这里用到了两个协议的方法
    在这里插入图片描述
    在这里插入图片描述
    当开始拖动时停止定时器,结束拖动时创建定时器,并将定时器添加到runloop中
    在这里插入图片描述
    这样就实现了停止拖动后能重新开始自动滚动的功能

  • 点赞同步
    从我的gif中可以看到当我为cell的点赞按钮点赞时,点赞时会加1,同时增加后的点赞数在点击cell后弹出的新界面中的点赞数相同,这就用到了属性传值,这里不在赘述

二、搜索界面

在这里插入图片描述
这个页面设计的东西比较多,但都比较简单,这里需要注意的就是第一个页面中的输入框不是UITextField而是UISearchBar,重点讲一下我们的第二个页面的折叠cell的实现


  • 折叠cell
    其实原理比较简单,就是我们的cell是添加到我们的tableview上的,即使有很多的cell,如果tableview的尺寸不够,就不能显示完所有的cell,我们通过点击按钮来调整我们的tableview的高度来实现cell是否完全显现

三、文章界面

在这里插入图片描述
这里其实就是一个简单的分栏控制器与滚动视图结合的效果,需要是这两个控件不能重叠
在这里插入图片描述

四、活动界面


简单的自定义cell,不过多赘述

五、我的界面

在这里插入图片描述
这个界面在当时做的时候比较繁琐,做完之后感觉难度其实还好,但是学到了很多新东西

这里讲一下学到的东西:
1. 学会了如何保存pop的视图
2. 了解了聊天室基本的代码原理,但还有弹出键盘自适应高度会出现黑屏的bug未解决

其他的基本都是一些已经学过的东西,只是比较繁琐

总结

总体来说难度不大,但是需要新学的东西很多,同时需要用老知识设计很多页面,比较繁琐,其中还有一些比较小的要点需要总结,会专门撰写博客指出

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

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

相关文章

SourceTree使用ssh密钥

设置Git的user name和email: $ git config --global user.name "xxx" $ git config --global user.email "xxx.mailxxx.com".检查是不是已经存在密钥(能进去说明已经存在,就删掉文件夹,重新创建)…

SPSS数据文件的结构重组

前言: 本专栏参考教材为《SPSS22.0从入门到精通》,由于软件版本原因,部分内容有所改变,为适应软件版本的变化,特此创作此专栏便于大家学习。本专栏使用软件为:SPSS25.0 本专栏所有的数据文件可在个人主页—…

python:GEDI 波形数据提取

作者:CSDN @ _养乐多_ 在这篇博客中,我们将介绍如何使用 Python 处理和可视化 GEDI(Global Ecosystem Dynamics Investigation)激光雷达数据。GEDI 是 NASA(美国国家航空航天局)推出的激光雷达地球观测任务,用于获取全球各地生态系统的三维结构信息。本文将以提取研究区…

VSCode同时编译多个C文件

一.环境说明 1.系统:Ubuntu 22.04.2 LTS 2.Visual Studio Code: 1.80.1 二.问题描述 今天使用VSCode编译《Programming Abstractions In C》书中的gymjudge.c代码时遇到错误,错误提示为: (base) codistspc:~/projects/Programming-Abstracti…

Ubuntu下打开QtCreator环境变量LD_LIBRARY_PATH与终端不一致

问题描述: 在unbuntu下使用QtCreator编译、运行程序时,总是出现XXX.so: cannot open shared object file: No such file or directory这类问题,但是在终端中编译或者运行程序则不会出现这些问题。在网上查了好久才明白QtCreator在打开时&…

【Visual Studio】Qt 在其他 cpp 文件中调用主工程下文件中的函数

知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 还整了一个如何在其他文件中调用 ui 控件的文章,感兴趣可以看:【Visual Studio】Qt 在其他 cpp 文件中调用操作 ui 界面控件。 文章目…

机器学习实战10-基于spark大数据技术与机器学习的结合应用实战

大家好,我是微学AI,今天给大家介绍一下机器学习实战10-基于spark大数据技术与机器学习的结合应用实战,Spark是一种快速、通用的大数据处理框架。它是由加州大学伯克利分校AMPLab开发。Spark提供了一个分布式计算的平台,可以在集群…

计算机组成与体系结构 概述

文章目录 计算机组成与体系结构 概述计算机系统概述计算机系统的组成计算机层次结构 计算机性能评价 计算机组成与体系结构 概述 计算机系统概述 计算机系统的组成 计算机的基本部件: 运算器:ALU、GPRs(通用寄存器组)、标志寄…

Java编程教程-Java ObjectStreamClass

ObjectStreamClass作为类的序列化描述符。该类包含类的名称和serialVersionUID。 # 方法 # 示例 toString() It returns a string describing this ObjectStreamClass.Exampleimport java.io.ObjectStreamClass; import java.util.Calendar; public class ObjectStreamCl…

谷歌插件(Chrome扩展) “Service Worker (无效)” 解决方法

问题描述: 写 background 文件的时候报错了,说 Service Worker 设置的 background 无效。 解决(检查)方法: 检查配置文件(manifest.json) 中的 manifest_version 是否为 3。 background 中的…

深入探索Spring的Bean注入:四种方式解析与循环依赖探讨

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~&#x1f33…

Docker-Compose 轻松搭建 Grafana+InfluxDb 实用 Jmeter 监控面板

目录 前言: 1、背景 2、GranfanaInfluxDB 配置 2.1 服务搭建 2.2 配置 Grafana 数据源 2.3 配置 Grafana 面板 3、Jmeter 配置 3.1 配置 InfluxDB 监听器 3.2 实际效果 前言: Grafana 和 InfluxDB 是两个非常流行的监控工具,它们可…

【力扣每日一题】2023.7.20 环形子数组的最大和

题目: 示例: 分析: 题目描述的有点复杂,特别是那个公式,一看到我就烦. 其实意思就是找出一个子数组(连续),要求这个子数组的和是所有子数组中最大的,并且这个数组是环形的,意思就是我这个子数组可以从原数组的尾部开始,到原数组的头部结束,…

Nginx文件下载预览加权限验证的思考和实现

做的项目中多个模块涉及到附件、图片、PDF/Excel等文件的处理,包括预览、导出和下载等功能。对于体积较小的文件,可以直接由后端以流形式传输给前端处理;而较大的文件则需要通过nginx进行转发。但是如果nginx中不设置鉴权服务,可能…

帖子列表和SerializerMixin注意事项

帖子序列化 继承SerializerMixin 即可调用to_dict()序列化 后端 class PostModel(db.Model, SerializerMixin):serialize_only ("id", "title", "content", "create_time", "board", "author")__tablename__ …

Ubuntu22.04上部署Lua开发环境

需求背景 想在Ubuntu22.04上搭建一下Lua的开发环境,其实步骤比较简单的,此文章也适用于Ubuntu主机环境搭建Lua,如果想在在Ubuntu内部署一个容器,然后在容器内搭建Lua的环境,可以先参考容器的创建过程 ubuntu22.04上如何创建有pri…

android adb命令获取处于当前屏幕的Activity

android adb命令获取处于当前屏幕的Activity 使用adb命令: adb shell dumpsys activity activities 输出,例如: ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities) Display #0 (activities from top to bottom): * Task{38ef601 #5281 typ…

C++-----list

本期我们来讲解list,有了string和vector的基础,我们学习起来会快很多 目录 list介绍 ​编辑 list常用接口 insert erase reverse sort merge unique remove splice 模拟实现 基础框架 构造函数 push_back 迭代器 常见问题 const迭代器 …

BEVPoolv2 A Cutting-edge Implementation of BEVDet Toward Deployment 论文学习

Github Repo: https://github.com/HuangJunJie2017/BEVDet/tree/dev2.0 Arxiv Paper: https://arxiv.org/abs/2211.17111 1. 解决了什么问题? 多相机 3D 目标检测是自动驾驶领域的基本任务,受到学术界和工业界的大量关注。Lift-Splat-Shoot view trans…

Linux基础IO(一)

Linux基础IO 文章目录 Linux基础IOC语言中的文件操作c语言文件打开方式C语言文件操作函数 系统文件操作stdin/stdout/stderropeanclosewriteread 文件描述符重定向什么是重定向dup2 C语言中的文件操作 我们通过两个代码复习一下C语言中的文件操作: int main() {FI…