ios开发

iOS 的组件化开发

六月ゝ 毕业季﹏ 提交于 2020-01-26 03:23:35
在一个APP开发过程中,如果项目较小且团队人数较少,使用最基本的MVC、MVVM开发就已经足够了,因为维护成本比较低。 但是当一个项目开发团队人数较多时,因为每个人都会负责相应组件的开发,常规开发模式耦合会越来越严重,而且导致大量代码冲突,会使后期维护和升级过程中代码“牵一发而动全身”,额外带来很大的工作量,并且会导致一些潜在的BUG。 在这时,组件化开发就派上很大用场了,所谓的组件化开发,就是把APP根据业务拆分为各独立的组件,各个组件相互写作,组成完整的APP。 一、各组件的引入 关于组件的拆分,就根据具体项目进行拆分,假如APP被拆分了AModule、BModule、CModule,那么,应该如何引入这些组件呢?你可能会想到APP的入口AppDelegate。在平时开发中,AppDelegate中往往初始化了好多组件,比如推送、统计等组件,这样就会导致AppDelegate的臃肿。 所以,我们可以增加一个 ModuleManager ,专门用来初始化各组件。 首先增加一个 ModuleProtocol : #import <Foundation/Foundation.h> @import UIKit; @import UserNotifications; @protocol ModuleProtocol <UIApplicationDelegate,

IOS开发-ios runtime-Method Swizzling

感情迁移 提交于 2020-01-26 00:27:57
method swizzling也许是runtime中最有争议的技术,它的作用就是改变已经存在selector的实现,之所以可以这样是因为方法调用可以在运行时改变:通过改变类的分发表( dispatch table,该表包含selector的名称及对应实现函数的地址)里selector和实现之间的对应关系。   举个例子,比如你想记录一个iOS应用里每个view controller显示的次数:可以在每个view controller添加记录的代码,但这会导致大量的重复代码;通过继承也是一个方法,但需要同时创建UIViewController, UITableViewController, UINavigationController及其它中view controller的子类,同样也会产生许多重复的代码出现。   幸运的是,在UIViewController的category使用method swizzling: #import <objc/runtime.h> @implementation UIViewController (Tracking) + (void)load { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ Class class = [self class]; SEL

iOS开发中的键盘高度变化处理

て烟熏妆下的殇ゞ 提交于 2020-01-24 21:50:28
- ( void )viewWillDisappear:( BOOL )animated { [[ NSNotificationCenter defaultCenter ] removeObserver : self name : UIKeyboardWillShowNotification object : nil ]; [[ NSNotificationCenter defaultCenter ] removeObserver : self name : UIKeyboardWillHideNotification object : nil ]; } - ( void )viewDidLoad { [ super viewDidLoad ]; [[ NSNotificationCenter defaultCenter ] addObserver : self selector : @selector (keyboardWillShow:) name : UIKeyboardWillShowNotification object : nil ]; [[ NSNotificationCenter defaultCenter ] addObserver : self selector : @selector (keyboardWillHide:) name :

iOS开发-OC语言 (一)oc数据类型

浪尽此生 提交于 2020-01-24 04:55:03
分享一套以前学习iOS开发时学习整理的资料,后面整套持续更新 : oc 数据类型 数据类型:基本数据类型、指针数据类型 基本数据类型:数值型、字符型(char)、布尔型、空类型(void) 指针数据类型:类(class)、id 数值型:整数类型int、浮点型float、double c 和 oc 的基本数据类型 int:声明整型变量 double:声明双精度变量 float:声明浮点型变量 char:声明字符型变量 id:通用的指针类型 enum:声明枚举类型 long:声明长整型变量或函数 short:声明短整型变量或函数 signed:声明有符号类型变量 struct:声明结构体变量 union:声明共用体(联合)数据类型 unsigned:声明无符号类型变量 void:声明函数无返回值或无参数 数据类型格式化说明符 数据类型 oc关键字 格式说明引导符 整型 int %d.%i 短整型 short int %hd.%hi 长类型 long int %ld.%li 无符号短整型 unsigned int %u 无短整型 unsigned short %hu 无符号长整型 unsigned long %lu 浮点型 float %f 双精度型 double %f 长双精度型 long double %lf 字符型 char %c 具体的数据类型 整数类型

iOS开发之各种动画各种页面切面效果

空扰寡人 提交于 2020-01-22 05:22:28
今天所介绍的主题是关于动画的,在之前的博客中也有用到动画的地方,今天就好好的总结一下iOS开发中常用的动画。说到动画其中有一个是仿射变换的概念,至于怎么仿射的怎么变换的,原理如何等在本篇博客中不做赘述。今天要分享的是如和用动画做出我们要做的效果。 今天主要用到的动画类是CALayer下的CATransition至于各种动画类中如何继承的在这也不做赘述,网上的资料是一抓一大把。好废话少说切入今天的正题。 一.封装动画方法 1.用CATransition实现动画的封装方法如下,每句代码是何意思,请看注释之。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #pragma CATransition动画实现 - (void) transitionWithType:(NSString *) type WithSubtype:(NSString *) subtype ForView : (UIView *) view { //创建CATransition对象 CATransition *animation = [CATransition animation]; //设置运动时间 animation.duration = DURATION; //设置运动type animation.type = type; if (subtype

iOS开发之各种动画各种页面切面效果

两盒软妹~` 提交于 2020-01-22 05:21:51
转发:http://www.cocoachina.com/ios/20141226/10775.html 今天所介绍的主题是关于动画的,在之前的博客中也有用到动画的地方,今天就好好的总结一下iOS开发中常用的动画。说到动画其中有一个是仿射变换的概念,至于怎么仿射的怎么变换的,原理如何等在本篇博客中不做赘述。今天要分享的是如和用动画做出我们要做的效果。 今天主要用到的动画类是CALayer下的CATransition至于各种动画类中如何继承的在这也不做赘述,网上的资料是一抓一大把。好废话少说切入今天的正题。 一.封装动画方法 1.用CATransition实现动画的封装方法如下,每句代码是何意思,请看注释之。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #pragma CATransition动画实现 - (void) transitionWithType:(NSString *) type WithSubtype:(NSString *) subtype ForView : (UIView *) view { //创建CATransition对象 CATransition *animation = [CATransition animation]; //设置运动时间 animation.duration =

ios中pch文件的创建与配置

◇◆丶佛笑我妖孽 提交于 2020-01-20 06:45:25
   项目开发过程中,在完成 iOS项目——项目开发环境搭建 之后,我们首先需要考虑的就是我们的项目的整体框架与导航架构设计,然后在这个基础上考虑功能模块的完成。 一 导航架构设计   一款App的导航架构设计应该是符合人们的操作惯性和方便操作的特点,也应该在交互上更加合理和人性化。根据项目功能和定位不同,不同的App的导航设计应该采用不同的技术框架,目前比较常见的导航框架主要有标签式、列表式、矩阵式三大类,如下图,具体每一类的特点及详情可以参见: 再谈App导航设计 。    目前资讯新闻类的移动端项目的主流App框架基本都是标签式的,这种类型的导航设计技术上基本上都是通过TabBar + NavigationController框架进行搭建完成,大家经常使用到的微博、今日头条等都是采用TabBar + NavigationController这样的框架。TabBar + NavigationController就是在 应该TabBar上添加itemBar,每一个itemBar都是一个独立的模块,并且每一个itemBar都对应一个NavigationController。因为每一个itemBar的导航器都不一样,所以应该是先有TabBar 再有NavigationController。   我们的项目也属于资讯类,所以我们的项目的框架也是采用TabBar +

iOS开发拓展篇—音频处理(音乐播放器5)

做~自己de王妃 提交于 2020-01-20 03:03:14
iOS开发拓展篇—音频处理(音乐播放器5) 实现效果: 一、半透明滑块的设置 1 /** 2 *拖动滑块 3 */ 4 - (IBAction)panSlider:(UIPanGestureRecognizer *)sender { 5 6 //1.获得挪动的距离 7 CGPoint t=[sender translationInView:sender.view]; 8 //把挪动清零 9 [sender setTranslation:CGPointZero inView:sender.view]; 10 11 //2.控制滑块和进度条的frame 12 CGFloat sliderMaxX=self.view.width-self.slider.width; 13 self.slider.x+=t.x; 14 //控制滑块的frame,不让其越界 15 if(self.slider.x<0) 16 { 17 self.slider.x=0; 18 }else if (self.slider.x>sliderMaxX) 19 { 20 self.slider.x=sliderMaxX; 21 } 22 //设置进度条的宽度 23 self.progressView.width=self.slider.center.x; 24 25 //3.设置时间值 26 double

iOS开发拓展篇—音频处理(音乐播放器3)

怎甘沉沦 提交于 2020-01-20 03:02:43
iOS开发拓展篇—音频处理(音乐播放器3) 说明: 这篇文章主要介绍音频工具类和播放工具类的封装。 一、控制器间数据传递 1.两个控制器之间数据的传递 第一种方法:self.parentViewController.music=self.music[indexPath.row];不能满足 第二种做法:把整个数组传递给它 第三种做法:设置一个数据源,设置播放控制器的数据源是这个控制器。self.parentViewController.dataSource=self;好处:没有耦合性,任何实现了协议的可以作为数据源。 第四种做法:把整个项目会使用到的音频资源交给一个工具类去管理,这样就不用传递过去了。直接向工具类索要资源就可以。 二、封装一个音频工具类 新建一个音频工具类,用来管理音乐数据(音乐模型)    工具类中的代码设计如下: YYMusicTool.h文件 1 // 2 // YYMusicTool.h 3 // 4 5 #import <Foundation/Foundation.h> 6 @class YYMusicModel; 7 @interface YYMusicTool : NSObject 8 /** 9 * 返回所有的歌曲 10 */ 11 + (NSArray *)musics; 12 13 /** 14 * 返回正在播放的歌曲 15 */ 16 +