空余时间做了一个QQ框架

做了很多效果,若你需要可以直接移植走,请不要忘记点赞啊

QQ是无聊的自己搭的一个框架,并且里面的效果都对齐进行了封装,特点概述:

  • 首先登陆效果:内部做了网络判断,一个效果图,内部需要随意可以更改,以封装;

代码块

self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
//设置window的根控制器
self.window.rootViewController = [[YFLoginTransitionViewController alloc] init];
[self.window makeKeyAndVisible];
  • 侧滑效果:仿QQ做了一个侧滑效果,已经对内部做了判断,在主页面进行了push后侧滑效果手势自动删除,并且进行了封装;

代码块

QQLeftViewController *leftVC = [[QQLeftViewController alloc] init];
QQMainViewController *rightVC = [[QQMainViewController alloc] init];
QQSliderViewController *controller = [[QQSliderViewController alloc]initWithLeftVC:leftVC andRightVC:rightVC];
controller.transitioningDelegate = self;
[self presentViewController:controller animated:YES completion:nil];
  • 搜索框效果:若你的项目需要搜索框,直接可以移植走,进行了封装;

代码块

self.tableView.tableHeaderView = self.searchController.searchBar;
self.searchController.searchResultsUpdater = self;
#pragma mark -搜索框
- (UISearchController *)searchController
{
if (!_searchController) {
QQSearchResultsTableViewController *searchResultsViewController = [[QQSearchResultsTableViewController alloc] init];
_searchController = [[UISearchController alloc] initWithSearchResultsController:searchResultsViewController]; //传入nil表示使用当前控制器
_searchController.searchBar.frame = CGRectMake(0, 0, 200, 44);
_searchController.searchBar.placeholder = @"搜索号码";
}
return _searchController;
}
#pragma mark - UISearchResultsUpdating
- (void)updateSearchResultsForSearchController:(UISearchController *)searchController
{
//创建临时数组,存放搜索到的内容
NSMutableArray *tempArray = [NSMutableArray array];
NSString *text = searchController.searchBar.text;
for (QQMessage *item in _TwodataList) {
if (text.length != 0 && [item.name containsString:text]) {
[tempArray addObject:item.name];
}
}
//给searchResultViewController进行传值,并且reloadData
QQSearchResultsTableViewController *searchResultsViewController = (QQSearchResultsTableViewController *)searchController.searchResultsController;
searchResultsViewController.tableView.frame = CGRectMake(0, 64, YFScreen.width, YFScreen.height - 64);
searchResultsViewController.searchDataArray = [NSMutableArray arrayWithArray:tempArray];
[searchResultsViewController.tableView reloadData];
}
  • 聊天界面:进行了高仿QQ的聊天界面,每个人一句话,并且对此增加了自动回复,而且进行了封装,并且聊天界面的键盘也进行了高度封装,可以自己加入需要的表情,大概我增加了两个类的表情,都可以使用,类中做了判断,并且使用起来很简单;

代码块

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
QQChatViewController *chat = [[QQChatViewController alloc]init];
[self.navigationController pushViewController:chat animated:YES];
}
  • 相册类效果:聊天界面右上角进行了对扫一扫功能进行优化,可以进行访问相机进行扫一扫,并且还可以访问本机相册的二维码,还能在扫一扫相机页面打开闪光灯;
    [图片上传中。。。(4)]

代码块

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.section == 0) {
// 1、获取摄像设备
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
if (device) {
AVAuthorizationStatus status = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
if (status == AVAuthorizationStatusNotDetermined) {
[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {
if (granted) {
dispatch_async(dispatch_get_main_queue(), ^{
SGScanningQRCodeVC *scanningQRCodeVC = [[SGScanningQRCodeVC alloc] init];
self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];
[self.navigationController pushViewController:scanningQRCodeVC animated:YES];
NSLog(@"主线程- - %@", [NSThread currentThread]);
});
NSLog(@"当前线程- - %@", [NSThread currentThread]);
//用户第一次同意了访问相机权限
NSLog(@"用户第一次同意了访问相机权限");
} else {
//用户第一次拒绝了访问相机权限
NSLog(@"用户第一次拒绝了访问相机权限");
}
}];
} else if (status == AVAuthorizationStatusAuthorized) { //用户允许当前应用访问相机
SGScanningQRCodeVC *scanningQRCodeVC = [[SGScanningQRCodeVC alloc] init];
[self.navigationController pushViewController:scanningQRCodeVC animated:YES];
} else if (status == AVAuthorizationStatusDenied) { //用户拒绝当前应用访问相机
SGAlertView *alertView = [SGAlertView alertViewWithTitle:@"⚠️警告" delegate:nil contentTitle:@"请去-> [设置-隐私-相机- SGQRCodeExample]打开访问开关" alertViewBottomViewType:(SGAlertViewBottomViewTypeOne)];
[alertView show];
} else if (status == AVAuthorizationStatusRestricted) {
NSLog(@"因为系统原因,无法访问相册");
}
} else {
SGAlertView *alertView = [SGAlertView alertViewWithTitle:@"⚠️警告" delegate:nil contentTitle:@"未检测到您的摄像头,请在真机上测试" alertViewBottomViewType:(SGAlertViewBottomViewTypeOne)];
[alertView show];
}
}else {
//取消选中状态
[self.tableView deselectRowAtIndexPath:indexPath animated:NO];
QQCommonViewController *commonVC = [[QQCommonViewController alloc]init];
[self.navigationController pushViewController:commonVC animated:YES];
}
}
  • 联系人页面添加效果:联系人右上角跳转到添加,进行了布局效果,可以进行滑动,也可以根据自己的需求添加内容;

代码块

#pragma mark -右上角添加的点击事件
- (void)rightToVC {
QQAddAnyViewController *addAny = [[QQAddAnyViewController alloc]init];
[self.navigationController pushViewController:addAny animated:YES];
}
  • 好友动画:好友动画页面对大概布局做了一个整理,里面主要目前添加了电话本和小画板的两个小功能;
  • 电话本:电话本对数据进行了实例化,并且可以随便跳转,保存并修改数据

代码块

QQPhoneTableViewController *phoneVC = [[QQPhoneTableViewController alloc]init];
[self.navigationController pushViewController:phoneVC animated:YES];
  • 小画板:小画板可以根据自己的要求,粗细颜色都集成,当然颜色不够自己还可以再加,而且保存可以把屏幕进行截屏保存到你的相册.

代码块

UIStoryboard *SB = [UIStoryboard storyboardWithName:@"CXLDrawViewController" bundle:nil];
UIViewController *drawVC = [SB instantiateInitialViewController];
[self.navigationController pushViewController:drawVC animated:YES];

关于地址

代码地址:GitHub
代码地址:码云

关于功能

后续有时间会继续增加功能,尽请期待!

反馈与建议

-微博:@夜_
-邮箱:873456034@qq.com


感谢阅读这份帮助文档。请点击右上角,点赞并分享。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容