暑假学习内容简单总结

news2024/12/24 20:42:26

暑假总结

文章目录

  • 暑假总结
    • 前言
    • 自动无限轮播图
    • UITableView
      • 给不同组设置独立的cell
      • 设置cell宽度
      • 设置组间距
      • 折叠cell
    • CALayer的简单使用
      • CALayer实现一个视图裁剪
      • CALayer的contentGravity的属性
      • CALayer设置背景图
      • 自定义UIColor
    • 网络请求
    • 正则表达式
    • 小结

前言

笔者在暑假通过几个项目学习了一些iOS开发入门的相关知识,这里笔者对于大部分内容进行一个总结。

自动无限轮播图

第一个项目中用到的自动无限轮播图,可以说是项目的开始,无限轮播图的思路主要还是设置需要图片数量+2张的图片。

下面是有关图片的实现:

在这里插入图片描述

图片选自无限轮播图

我们可以通过设置UIScrollview的相关协议函数以及设置定时器的方式来实现一个无限轮播的效果。下面主要给出一下相关的实现代码。

- (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;
    }
}

UITableView

整个暑假中最重要的还是如何使用UITableView,虽然笔者在之前学习有关内容,但是还是过于浅显,这里在重新讲一下暑假中对于自UITableVIew的一些使用。

给不同组设置独立的cell

我们可以定义不同的标识符,然后通过判别一下有关不同的组来返回我们不同的cell。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    homeTableViewCell *cell02 = [self.mainTableView dequeueReusableCellWithIdentifier:@"button"];
    homeTableViewCell *cell01 = [self.mainTableView dequeueReusableCellWithIdentifier:@"advertise"];
    homeTableViewCell *cell03 = [self.mainTableView dequeueReusableCellWithIdentifier:@"music"];
    homeTableViewCell *cell04 = [self.mainTableView dequeueReusableCellWithIdentifier:@"myself"];
    homeTableViewCell *cell05 = [self.mainTableView dequeueReusableCellWithIdentifier:@"recommend"];
    if (indexPath.section == 0) {
        return cell01;
    } else if (indexPath.section == 1) {
        
        return cell02;
    } else if (indexPath.section == 2){
        return cell03;
    } else if (indexPath.section == 3){
        return cell04;
    } else if (indexPath.section == 4){
        return cell05;
    } else {
        return nil;
    }
}

设置cell宽度

在实际开发中我们,可能需要设置cell与我们的手机边缘留有空隙,所以我们这里需要设置一下UITableView的setFrame的方法,

我们可以通过这个方法来设置相应的cell的宽度。

- (void)setFrame:(CGRect)frame {
  
}

设置组间距

在之前对于cell的学习中没有涉及到有关组间距的方法,但在实际开发中我们又会用到设计组间距的方式。

实际上,我们可以通过给设置空白VIew的方式来给我们的UITableView设置组间距。

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    if(section == 0) {
        return 0.001;
    } else {
        return 12;
    }
}
-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
    return 12;
}
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    UIView *headerView;
    if (section == 0) {
        headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 0.001)];
    } else {
        headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 12)];
    }
    return headerView;
}

折叠cell

在仿写的过程中,学习了一个简单的折叠cell,下面主要给出相关的代码,其实思路就是通过点击按钮,来修改我们UITableView的一个frame从而可以展示不同的内容。

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString* str = _ary[indexPath.section];
    [_ary removeObjectAtIndex:indexPath.section];//删除这个位置的字符串
    [_ary insertObject:str atIndex:0];//插入在首位
    [tableView reloadData]; //记得刷新单元格
    [self press:_btn]; //显示所有内容
}
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"id"];
    [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
    cell.textLabel.text = self.ary[indexPath.section];
    return cell;
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return 30;
}
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 4;
}
-(void)press:(UIButton*)btn {
    btn.selected = !btn.selected;
    if (btn.selected) {
        self.tableView.frame = CGRectMake(240, 180, 120, 120);
    } else {
        self.tableView.frame = CGRectMake(240, 180, 120, 30);
    }
}

CALayer的简单使用

CALayer在暑假期间我简单进行了一下学习,自己也写了一篇博客简单总结了一下CALayer这里不介绍原理,简单的讲解一下有关的一些方法。

CALayer实现一个视图裁剪

我们可以通过这种方式来实现一个视图的裁剪。

self.Podfilebutton.layer.masksToBounds = YES;
self.Podfilebutton.layer.cornerRadius = self.Podfilebutton.frame.size.width / 2;

CALayer的contentGravity的属性

在实践中我们可能会遇到一些图片被拉伸的问题,这时候,我们最好的方法是把contentMode属性设置成更合适的值,这样可以让我们的图片不被拉伸。

view.contentMode = UIViewContentModeScaleAspectFit;

CALayer设置背景图

这样可以给我们的图片设置背景图片。

layer.contents = (__bridge id)image.CGImage;

自定义UIColor

在iOS的实际开发中我们经常需要使用自定义color。这里简单讲解一下有关UIColor的内容,我们可以使用mac上的颜色选择器得到相应颜色,然后将这几个值写到下面的方法中就可以了。

+ (UIColor *)colorWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha;

网络请求

网络请求笔者在天气预报中已经进行了一个简单的讲解,这里就不多赘述。

正则表达式

在很多项目中间,我们需要限制输入的字符种类,不可以输入除了英文和数字其他的字符,这时候,我们就需要用到OC中的正则表达式的相关内容,来实现一个限制字符的效果。

笔者只会一个简单的使用,这里简单介绍一下相关的方法和对应的类别。

在OC这个语言中我们最主要还是运用NSPredicate这个类别。

这里笔者引用一段别人的文字来介绍一下NSPredicate

NSPredicate类是用来定义逻辑条件约束的获取或内存中的过滤搜索,该对象可以准确的描述所需条件,对每个对象通过谓词进行筛选,判断是否与条件相匹配。使用NSPredicate可以有效地过滤和查询数据,提高数据处理的效率和灵活性。在Core Data中,NSPredicate常用于构建Fetch请求,从数据库中检索符合特定条件的数据。同时,在使用集合类(如NSArray、NSDictionary)时,NSPredicate也可以用来对数据进行过滤和排序。

所以我们需要对于这个类别的一些方法进行一个简单的了解。

predicateWithFormat:创建一个谓词。

+ (id)predicateWithFormat:(NSString *)format...;

笔者仅仅简单了解了部分内容,仅仅知道通过MATCHES来让左侧表达式来匹配右侧的表达式

这里给出一些相关谓词:

evaluateWithObject:接受对象,根据指定的对象计算自身的值。

-(BOOL)evaluateWithObject:(id)value;//通过这个方法来判断是否符合左侧表达式是否符合右侧表达式。

在这里插入图片描述

- (BOOL)classInputShouldNumber:(UITextField*)textfield {
    NSString *regex = @"^[\u4e00-\u9fa5]{2,4}\\d{4}$";//限制前面的字符为中文字符个数为2-4,后面限制的数字个数永远为4
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex];//创建一个谓词
    if (![pred evaluateWithObject:textfield.text]) {
        return NO;
    }
    return YES;
}

通过这里的方式,我就可以实现一个简单的限制字符的输入以及设置文字的相关格式的效果。

笔者这里简单介绍一下相关用法,如果想详细了解相关内容,可以看「OC」NSPredicate —— 使用谓词过滤元素

小结

这就是笔者对于暑假学习内容的一个简单的总结,暑假学习的内容很多还需要多多沉淀与复习。

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

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

相关文章

atcoder abc 369

A 369 问题&#xff1a; 思路&#xff1a;暴力枚举 代码&#xff1a; #include <bits/stdc.h>using namespace std;int main() {int a, b;cin >> a >> b;int cnt 0;for(int i -1000; i < 1000; i ) {vector<int> aa;aa.push_back(a);aa.push…

网络编程套接字(含Java示例)

文章目录 Socket套接字概念分类流式套接字&#xff1a;使用传输层TCP协议数据报套接字&#xff1a;使用传输层UDP协议Unix域套接字 TCP vs UDP有连接 vs 无连接可靠传输 vs 不可靠传输面向字节流 vs 面向数据报全双工 vs 半双工 UDP数据报套接字编程DatagramSocketDatagramPack…

AI安全前沿:模型攻击与防御策略

引言 随着chatGPT的横空出世&#xff0c;通用人工智能的时代正式开启。人工智能极大地影响了人类的生活方式和生产方式&#xff0c;例如以ChatGPT为代表的各类大模型&#xff0c;能够理解和生成人类语言&#xff0c;并以对话的方式同人类进行互动&#xff0c;能够执行撰写文本…

央视报道:国产时序数据库 IoTDB 刷新世界性能纪录!

IoTDB&#xff08;Internet of Things Database&#xff09;是一个专为物联网&#xff08;IoT&#xff09;场景设计的时间序列数据库管理系统&#xff08;TSDB&#xff09;。随着物联网技术的发展&#xff0c;大量的设备连接到互联网上&#xff0c;产生了海量的时间序列数据。这…

各位天命人!国自然评审意见出来了,那如何判断是否上会?

公众号&#xff1a;生信漫谈&#xff0c;获取最新科研信息&#xff01; 各位天命人&#xff01;国自然评审意见出来了&#xff0c;那如何判断是否上会&#xff1f;https://mp.weixin.qq.com/s?__bizMzkwNjQyNTUwMw&mid2247487055&idx1&sn1dc8b66e10323d37e477e88…

新版本 Redline 使用 Lua 字节码逃避检测

近日&#xff0c;研究人员观察到 Redline Stealer 木马的新变种&#xff0c;开始利用 Lua 字节码逃避检测。 遥测分布 根据遥测数据&#xff0c;Redline Stealer 木马已经日渐流行&#xff0c;覆盖北美洲、南美洲、欧洲和亚洲甚至大洋洲。 感染链 感染链 微软官方账户的 vcp…

基于Java的汽车推荐购买系统的设计与实现(论文+源码)_kaic

摘要 随着经济水平的不断提高&#xff0c;汽车销售行业存在激烈竞争&#xff0c;人们对于生活中汽车的需求也越来越多&#xff0c;而目前的汽车推荐购买管理由于存在管理不规范性等缺点&#xff0c;严重制约了汽车推荐购买和汽车公司的发展&#xff0c;因此需要设计一个汽车推荐…

一加8T安装 Kali NetHunter 高阶教程 KB2000刷机 param预载失败 高通9008驱动签名 小米刻晴主题

前言 本文包含一加8T手机刷入kaili nethunter 的详细版教程、资源、刷机知识思维导图、param预载失败问题解决、高通刷机驱动故障问题解决、小米刻晴主题等资源的分享 本机环境 手机&#xff1a;OnePlus 8T &#xff08;型号KB2000&#xff09; 系统&#xff1a;Android 13 …

公司招聘中,多个面试官对候选人评价不一致怎么办?

面试过程中&#xff0c;极易出现面试官评价标准不一的情况&#xff0c;为了有效解决这一问题&#xff0c;企业可以建立一套标准化的面试评分体系&#xff0c;在该体系中&#xff0c;应该详细包括统一的评分标准和评分细则&#xff0c;内容覆盖求职者的专业技能、沟通能力、团队…

【Threejs进阶教程-着色器篇】6. 2D SDF(三) 移动图形,限制图形,绘制多个图形

2D SDF 移动与合并图形 前五篇地址&#xff0c;建议按顺序学习本篇使用到的初始代码减小扩散范围clamp函数修改maxDistance来修改扩散范围 移动扩散中心添加第二个扩散点降低点的同步率调整参数来优化效果添加更多扩散点 完整源码如有不明白的&#xff0c;可以在下方留言或者加…

01:【stm32HAL】对GPIO的操作

对GPIO的操作 1、LED闪烁2、按键控制LED3、芯片调试接口被锁死导致无法下载程序 1、LED闪烁 使用的是STM32CubeMXKeilv5进行HAL库的开发。 开发的步骤&#xff1a; 第一步&#xff1a;新建工程 第二步&#xff1a;选择芯片 第三步&#xff1a;如下图哈哈 第四步&#xff1a;…

图像识别智能垃圾桶项目开发--语音命令识别垃圾

一、项目思维导图 二、语音模块配置信息 三、项目程序 main.c garbage.c garbage.h uartTool.c //串口发送数据 uartTool.h

IPv6配置实验(OSPFv3)

1.搭建拓扑图 2.配置接口IP地址

文件上传的学习

文件上传漏洞 文件上传漏洞是指由于程序员在对用户文件上传部分的控制不足或者处理缺陷&#xff0c;而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马&#xff0c;病毒&#xff0c;恶意脚本或者WebShell等。“文件上传”本身没有…

计算机毕业设计推荐-基于python的公司员工考勤管理系统

&#x1f496;&#x1f525;作者主页&#xff1a;毕设木哥 精彩专栏推荐订阅&#xff1a;在 下方专栏&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; 实战项目 文章目录 实战项目 一、基于python的公司员工考勤管…

电池点焊机设计要点记录及个人分析

想要设计的由来 有些电路板或动力元件需要电池和镍片的连接&#xff0c;虽然临时使用焊锡焊接在了一起&#xff0c;但焊接过程中的热量和焊接后的厚度太大。最终想要设计一个用于点焊的板子 点焊的原理和操作上的误区 原理&#xff1a;两个点焊笔和镍片的接触点直径相比于导…

Local GAP - Financial Statement Version 【海外BS\PL报表】

业务场景&#xff1a; 基于海外IFRS等会计准则为客户定义一套BS\PL报表 BS - 从科目余额抓取 PL - 从利润中心报表抓取 会计报表版本的建立&#xff1a; 路径&#xff1a;IMG>财务会计&#xff08;新&#xff09;>总账会计核算&#xff08;新&#xff09;主数据>总…

【电子通识】失效分析中的电测试技术——电阻测试方法及注意事项

失效分析通常需要对测试数据进行仔细的分析&#xff0c;因此&#xff0c;测试设备的数据准确性和可靠性是至关重要的基本要求。为了确保数据的准确性&#xff0c;失效分析所使用的测试设备需要进行定期计量。 测试设备选择 在测试电阻、电容和电感的设备中&#xff0c;最常见的…

watchdog: BUG: soft lockup

故障现象&#xff1a; 故障原因&#xff1a; 不知道。 解决办法&#xff1a; 由12个改成2个&#xff1b;然后重新开机虚拟机&#xff0c; 临时解决了。

使用Golang的协程竟然变慢了|100万个协程的归并排序耗时分析

前言 这篇文章将用三个版本的归并排序&#xff0c;为大家分析使用协程排序的时间开销&#xff08;被排序的切片长度由128到1000w&#xff09; 本期demo地址&#xff1a;https://github.com/BaiZe1998/go-learning 往期视频讲解 &#x1f4fa;&#xff1a;B站&#xff1a;白泽…