iOS微信朋友圈与摇一摇

2023-10-19 15:30
文章标签 微信 ios 朋友圈 摇一摇

本文主要是介绍iOS微信朋友圈与摇一摇,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本Demo为练手小项目,主要是熟悉目前主流APP的架构模式.此项目中采用MVC设计模式,纯代码和少许XIB方式实现.主要实现了朋友圈功能和摇一摇功能.

预览效果:


WeChat_Demo.gif
主要重点
1.整体架构

利用UITabBarController和UINavigationController配合实现.其中要注意定义基类,方便整体上的管理,例如对UINavigationController头部的颜色,字体和渲染颜色等设置.以及对UITabBarController的底部的渲染等.

[self.navigationBar setBackgroundImage:[UIImage imageNamed:@"Dimensional-_Code_Bg"] forBarMetrics:UIBarMetricsDefault];      [self.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor whiteColor]}];[self.navigationBar setTintColor:[UIColor whiteColor]];
2.发现界面和我的界面

利用UITableViewController和Plist文件实现界面的展示.实现过程中有采用数据模型或直接利用字典等方式.这里的实现比较简单,就不多说啦.

- (instancetype)initWithDict:(NSDictionary *)dict{if (self = [super init]) {[self setValuesForKeysWithDictionary:dict];
}
return self;
}+ (instancetype)pictureWithDict:(NSDictionary *)dict{return [[self alloc] initWithDict:dict];
}
3.朋友圈功能的实现

这里面主要的难点在于朋友圈首页的下拉刷新效果的实现,和选择照片页的状态重用问题,以及照片的传递和代理的实现等.
朋友圈首页的下拉刷新效果:主要利用transform属性和scrollview的多种滚动状态.

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{self.dragging = YES;
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{if (self.num == 0) {self.num ++;return;
}CGFloat offsetY = scrollView.contentOffset.y;CGFloat angle = -offsetY * M_PI / 30;if (self.dragging == YES) {if (offsetY <= 110) {self.containerView.y = 10 + offsetY;}}else {if (self.currentY < 120) {self.containerView.y = 10 + offsetY;}}
self.activityView.transform = CGAffineTransformMakeRotation(angle);}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{self.dragging = NO;CGFloat currentY = self.containerView.y;
self.currentY = currentY;}- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{[UIView animateWithDuration:0.25 animations:^{self.containerView.frame = CGRectMake(15, 120, 30, 30);self.activityView.transform = CGAffineTransformMakeRotation(2 * M_PI);
}];}

其中照片的展示是采用UICollectionViewController来实现的.没有直接调用系统的相册,因此加大了难度.自定义了cell,并采用了代理方式来实现类与类之间的通信.

@protocol YYPictureCellDelegate <NSObject>
@optional
- (void)pictureCell:(YYPictureCell *)cell withDidClickBtn:(UIButton *)btn;@end- (IBAction)clickSureBtn:(UIButton *)sender {if ([self.delegate respondsToSelector:@selector(pictureCell:withDidClickBtn:)]) {[self.delegate pictureCell:self withDidClickBtn:sender];
}
}- (void)pictureCell:(YYPictureCell *)cell withDidClickBtn:(UIButton *)btn{if ((self.selectedBtn.count == 9) && (!btn.isSelected)) {UIAlertView *alert = [[UIAlertView alloc]initWithTitle:nil message:@"最多选取9张照片哦,亲!" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles: nil];[alert show];return;
}btn.selected = !btn.isSelected;NSIndexPath *indexPath = [self.collectionView indexPathForCell:cell];YYPictureModel *model = self.dataArray[indexPath.row];if (btn.isSelected) {model.clickedBtn = YES;[self.selectedBtn addObject:btn];[self.selImageArray addObject:model];} else{model.clickedBtn = NO;[self.selectedBtn removeObject:btn];[self.selImageArray removeObject:model];
}if (self.selectedBtn.count > 0) {self.doneBtn.enabled = YES;self.doneBtn.selected = YES;self.previewBtn.enabled = YES;self.previewBtn.selected = YES;
}else {self.doneBtn.enabled = NO;self.doneBtn.selected = NO;self.previewBtn.enabled = NO;self.previewBtn.selected = NO;
}   
}
4.摇一摇功能的实现

摇一摇功能的本身实现十分简单,就是调用系统的两个方法即可.难点在于动画效果.其实这里的动画效果也不是很难.主要是计算有点复杂.可能是我在网上搜索到的素材有点不合适.导致要考虑各个控件的frame问题...

//实现摇一摇功能
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event{self.upLine.hidden = NO;
self.downLine.hidden = NO;
[UIView animateWithDuration:0.6 animations:^{self.upImageView.y -= 60;self.upLine.y -= 60;self.downImageView.y += 60;self.downLine.y += 60;}completion:^(BOOL finished) {[UIView animateWithDuration:0.6 animations:^{self.upImageView.y += 60;self.upLine.y += 60;self.downImageView.y -= 60;self.downLine.y -= 60;} completion:^(BOOL finished) {self.upLine.hidden = YES;self.downLine.hidden = YES;//弹出搜索框[self showSearchView];[self.searchView performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:2.4];}];}];
}
//摇一摇结束后
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event{}

结束语:

在此,还有感谢提供素材的网友们.此demo主要是把功能实现,代码方面没有做过多的优化,但是易懂,呵呵...有待后续添加其他功能和代码的优化.需要源代码的请戳这里:https://github.com/yaomars/WeChat_Demo



文/YYSky(简书作者)
原文链接:http://www.jianshu.com/p/fe8d577c596b
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

这篇关于iOS微信朋友圈与摇一摇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/240697

相关文章

W外链微信推广短连接怎么做?

制作微信推广链接的难点分析 一、内容创作难度 制作微信推广链接时,首先需要创作有吸引力的内容。这不仅要求内容本身有趣、有价值,还要能够激起人们的分享欲望。对于许多企业和个人来说,尤其是那些缺乏创意和写作能力的人来说,这是制作微信推广链接的一大难点。 二、精准定位难度 微信用户群体庞大,不同用户的需求和兴趣各异。因此,制作推广链接时需要精准定位目标受众,以便更有效地吸引他们点击并分享链接

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

【iOS】MVC模式

MVC模式 MVC模式MVC模式demo MVC模式 MVC模式全称为model(模型)view(视图)controller(控制器),他分为三个不同的层分别负责不同的职责。 View:该层用于存放视图,该层中我们可以对页面及控件进行布局。Model:模型一般都拥有很好的可复用性,在该层中,我们可以统一管理一些数据。Controlller:该层充当一个CPU的功能,即该应用程序

uniapp设置微信小程序的交互反馈

链接:uni.showToast(OBJECT) | uni-app官网 (dcloud.net.cn) 设置操作成功的弹窗: title是我们弹窗提示的文字 showToast是我们在加载的时候进入就会弹出的提示。 2.设置失败的提示窗口和标签 icon:'error'是设置我们失败的logo 设置的文字上限是7个文字,如果需要设置的提示文字过长就需要设置icon并给

基于微信小程序与嵌入式系统的智能小车开发(详细流程)

一、项目概述 本项目旨在开发一款智能小车,结合微信小程序与嵌入式系统,提供实时图像处理与控制功能。用户可以通过微信小程序远程操控小车,并实时接收摄像头采集的图像。该项目解决了传统遥控小车在图像反馈和控制延迟方面的问题,提升了小车的智能化水平,适用于教育、科研和娱乐等多个领域。 二、系统架构 1. 系统架构设计 本项目的系统架构主要分为以下几个部分: 微信小程序:负责用户界面、控制指令的

微信小程序uniappvue3版本-控制tabbar某一个的显示与隐藏

1. 首先在pages.json中配置tabbar信息 2. 在代码根目录下添加 tabBar 代码文件 直接把微信小程序文档里面的四个文件复制到自己项目中就可以了   3. 根据自己的需求更改index.js文件 首先我这里需要判断什么时候隐藏某一个元素,需要引入接口 然后在切换tabbar时,改变tabbar当前点击的元素 import getList from '../

微信小程序(一)数据流与数据绑定

一、单向数据流和双向数据流 1、单项数据流:指的是我们先把模板写好,然后把模板和数据(数据可能来自后台)整合到一起形成HTML代码,然后把这段HTML代码插入到文档流里面 优点:数据跟踪方便,流向单一,追寻问题比较方便【主要体现:微信小程序】。 缺点:就是写起来不太方便,如果修改UI界面数据需要维护对应的model对象 2、双向数据流:值和UI是双向绑定的,大家都知道,只要UI里面的值发生

微信小程序学习网站

小程序--柯神博客 http://www.cnblogs.com/nosqlcoco 案例地址: https://github.com/cocoli/weixin_smallexe/tree/master/weixin_demo/pages/component/uploadfile

iOS剪贴板同步到Windows剪贴板(无需安装软件的方案)

摘要 剪贴板同步能够提高很多的效率,免去复制、发送、复制、粘贴的步骤,只需要在手机上复制,就可以直接在电脑上 ctrl+v 粘贴,这方面在 Apple 设备中是做的非常好的,Apple 设备之间的剪贴板同步功能(Universal Clipboard)确实非常方便,它可以在 iPhone、iPad 和 Mac 之间无缝传输剪贴板内容,从而大大提高工作效率。 但是,iPhone 如何和 Wind

分享一个基于uniapp科技馆服务微信小程序 博物馆管理小程序(源码、调试、LW、开题、PPT)

💕💕作者:计算机源码社 💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流! 💕💕学习资料、程序开发、技术解答、文档报告 💕💕如需要源码,可以扫取文章下方二维码联系咨询 💕💕Java项目 💕💕微信小程序项目 💕💕Android项目 �