摘要:一:效果如图: 二:代码: 分析界面,当手指在上面移动时,当移动到一个按钮范围内当中, 它会把按钮给成为选中的状态. 并且把第一个选中的按钮当做一个线的起点,当手指移动到某个按钮上时,就会添加一根线到选中的那妞上. 当手指松开时,所有按钮取消选中.所有的线都清空. 实现思路: 先判断点前手指在不在当
阅读全文
摘要:一:效果如图: 二:代码: 分析界面,当手指在上面移动时,当移动到一个按钮范围内当中, 它会把按钮给成为选中的状态. 并且把第一个选中的按钮当做一个线的起点,当手指移动到某个按钮上时,就会添加一根线到选中的那妞上. 当手指松开时,所有按钮取消选中.所有的线都清空. 实现思路: 先判断点前手指在不在当
阅读全文
摘要:一:图片截屏:截取的是控制器的view 截屏效果实现具体思路为:把UIView的东西绘制图片上下文当中,生成一张新的图片. 注意:UIView上的东西是不能直接画到上下文当中的. UIView之所以能够显示是因为内部的一个层(layer),所以我要把层上的东西渲染到UIView上面的. 怎样把图层当
阅读全文
摘要:一:圆形图片的绘制 裁剪图片思路. 开启一个图片上下文. 上下文的大小和原始图片保持一样.以免图片被拉伸缩放. 在上下文的上面添加一个圆形裁剪区域.圆形裁剪区域的半径大小和图片的宽度一样大. 把要裁剪的图片绘制到图片上下文当中. 从上下文当中取出图片. 关闭上下文. 1.如何设置圆形路径? UIBe
阅读全文
摘要:一:关注界面UI内容比较固定,所以可以采用xib来进行搭建,当项目中一些界面比较固定的时候,可以采用xib或是storyboard来搭建 二:效果如图所示 : 三:xib界面构建如图: 四:知识点总结: 1:当界面的UI内容比较固定那么可以采用xib或是storyboard来搭建 2:若是先创建的控
阅读全文
摘要:给图片水印的目的: 告诉别人图片的来源. 防止别人盗用图片.打广告. 添加水印它最终是生成了一个新的图片. 生成图片要用到了图片上下文.不需要再去自定义View, 之前一直在自定义View,是因为要拿跟View相关联的上下文. 跟View相关联的上下文是系统自动帮我们创建的,所以不需要我们自己手动创
阅读全文
摘要:上下文的矩阵操作其实就是修改上下文的形变, 主要有以下几种 平移 CGContextTranslateCTM(ctx, 100, 100); 旋转 CGContextRotateCTM(ctx, M_2_PI); 缩放 CGContextScaleCTM(ctx, 0.5, 0.5); 注意:上下文
阅读全文
摘要:上下文状态栈为内存中的一块区域,它用来保存前上下文当的状态. 我们获取的图层上下文当中其实两块区域,一个是存放添加的路径,一个是用来保存用户设置的状态, 这些状态包括线条的颜色,线宽等. 当我们把上下文的内容渲染到View上面的时候, 它会自动将设置的所有上下文状态运行到保存的路径上面显示到View
阅读全文
摘要:1.定时器雪花整体思路: 先在控制器View面绘制一个雪花. 在View加载完毕后,添加一个定时器. 在定时器方法当中调用得绘方法. 在绘图方法当不段的去修改雪花的Y值. 当雪花的Y值超过屏幕的高度时,让雪花的Y值重新设为0.从最顶部开始. 2.添加定时器实现方案 第一种采用NSTime 第二种采用
阅读全文
摘要:整体思路: 我们想要模仿系统的UIImageView,我们必须得要知道系统的UIView怎么用. 系统的用法是创建一个UIImageView对象,设置frame,给它传递一个UIImage,再把它添加到一个View上面就可以了. 可以切换图片. 这是第一个用法. 第二种用法,就是在创建的时候直接传递
阅读全文
摘要:一般使用UIKit给我们提供的绘图来绘制一些文字,图片这些东西. UIKit给我们提供画图的方法底层也是分为四步.所以也必须在drawRect方法当中去写. 1.如何画文字? 先创建好要画的文字 使用UIKit提供的方法进行绘制. 方法说明: drawAtPoint:要画到哪个位置 withAttr
阅读全文
摘要:第一步, 获取上下文 第二步,拼接路径 ,绘制第一个扇形 获取上下文 CGContextRef ctx = UIGraphicsGetCurrentContext(); CGPoint center = CGPointMake(125, 125); CGFloat radius = 100; CGF
阅读全文
摘要:一:效果如图: 二:代码 1.搭建界面. 2.拖动滑竿的时候让他里面的能够跟着我的拖动,数字在改变. 数字改变时有一个注意点, 就是要显示%,它是一个特殊的符号,要用两个%%代表一个% 3.拖动滑竿的时候就是在上面画弧. 从最上面,按顺时针画,所以,它的起始角度是-90度.结束角度也是-90度 也是
阅读全文
摘要:1.DrawRect方法作用?什么时候调用. DrawRect作用:专用在这个方法当中绘图的.只有在这个方法当中才能取得跟View相关联的上下文. DrawRect是系统自己调用的, 它是当View显示的时候自动调用. 2.画线(基本步骤描述) 2.1获取跟View相关联的上下文 CGContext
阅读全文
摘要:一:什么是Quzrtz2D 二:Quzrtz2D实例: 三:图形上下文 四:Quzrtz2D在ios开发中的实际价值 1.什么是Quartz2D? 他是一个二维的绘图引擎,同时支持iOS和Mac系统 2.Quartz2D能完成的工作 画基本线条,绘制文字,图片,截图,自定义UIView. 3.Qua
阅读全文
摘要:二:抽屉效果的使用: 1:当我们用别人封装好的框架时,若不是不符合需求尽量不要修改源代码,采用继承的方式去利用别人封装好的框架 2:当我们已经在xib或是storyboard中拖进去控件的时候,此时又新建立了一个类,想与xib或是storyboard中的拖进去的控件相关联,此时可以在xib或是sto
阅读全文
摘要:#import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UIImageView *imageV; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]...
阅读全文
摘要:#import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UIImageView *imageV; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]...
阅读全文
摘要:2:hitTest 方法的练习1: 业务逻辑: 底部一个按钮, 按钮的上面有一个View,遮挡在按钮的上面. 点击View时, View接收事件,当发现点击的点在按钮的位置时, 让底部的按钮处理事件. 实现思路: 实现View的touchBegain方法,先坚听UIView的点击. 并去实现UIVi
阅读全文
摘要:1:事件的产生与传递: 2:寻找最合适的view:如何查找最合适的view:需要三步:1:先判断自身是否能接受触摸事件 2:判断触摸点是否在自己身上 3:若前两条都满足,则其会从后往前遍历所有子控件(从后往前遍历是考虑到效率的问题,后指的是子控件数组中的最后一个控件)继续重复12步骤,直到找到最合适
阅读全文
摘要:1.事件是怎么样产生与传递的? 当发生一个触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件队列中.(队列是先进先出,而栈是先进后出) UIApplication会从事件队列中取出最前面的事件,并将事件分发下去以便处理.首先交给主窗口keywindow去处理 主窗口会在视图层
阅读全文
摘要:1.ios当中常⽤的事件? 触摸事件 ,加速计事件 ,远程控制事件 2.什么是响应者对象? 继承了UIResponds的对象我们称它为响应者对象 UIApplication、UIViewController、UIView都继承⾃自UIResponder 因此它们都是响应者对象,都能够接收并处理事件
阅读全文
摘要:#import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UIImageView *imageV; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]...
阅读全文
摘要:一:项目环境的搭建: 项目环境的搭建包括:1:新建类的前缀 2:项目支持的旋转方向,版本 3:项目名称,软件名称 4:APP的icon,启动图片的设置 5:项目的文件夹分层 6:根控制器的设置 等 具体详情请参照新浪微博的项目环境配置 二:cocoaPods的安装与使用 1:具体参照新浪微博项目co
阅读全文
摘要:1:坐标系转换最核心的问题就是:比较两个坐标是否包含,或者是重叠等,最主要的问题是先将两个坐标转换到同一个坐标系下再去比较。第一步先确定矩形框在某个view坐标系下的frame(该矩形框是以该view的左上角为坐标原点)2:再转换到另一个view坐标系下(转换后的坐标依然是以另一个view的坐标原点
阅读全文
摘要:1:block的循环引用问题最主要记住两点: 如果【block内部】使用【外部声明的强引用】访问【对象A】, 那么【block内部】会自动产生一个【强引用】指向【对象A】 如果【block内部】使用【外部声明的弱引用】访问【对象A】, 那么【block内部】会自动产生一个【弱引用】指向【对象A】 2
阅读全文
摘要:总结:1:从相册中选取照片可以利用UIImagePickerController,前提是必须遵守两个协议: <UIImagePickerControllerDelegate, UINavigationControllerDelegate>但是此种方法只能获取到相册中的一张照片。使用方法如下:1:可以
阅读全文
摘要:#import @interface NSDate (XMGExtension) /** */ // @property (nonatomic, copy) NSString *name; //- (NSString *)name; //- (void)setName:(NSString *)name; /** * 是否为今年 */ - (BOOL)isThisYear; /**...
阅读全文
摘要:总结: ## NSDateFormatter的作用 - NSString \* -> NSDate * ```obj - (nullable NSDate *)dateFromString:(NSString *)string; ``` - NSDate \* -> NSString * ```ob
阅读全文
摘要:前言:做了一个图片浏览的小demo,支持随意添加、删除图片,图片放大、缩小,带矩形框的截图。随后几篇博客都会详细讲解在此过程中遇到的各种问题。这篇主要讲,在做添加、删除这个功能时,遇到的存文件的问题。 我们想实现在以后每次打开这个程序时,不用再一张张手动添加,而会保留用户上次已经选择的图片,那么就需
阅读全文
摘要:一:基本概念 1:进程:正在运行的程序为进程。 2:线程:每个进程要想执行任务必须得有线程,进程中任务的执行都是在线程中。 3:线程的串行:一条线程里任务的执行都是串行的,假如有一个进程开辟了一条线程,此条线程里有ABC三个任务,则ABC三个任务的执行是串行的,ABC三个任务按顺序一个个执行 4:多
阅读全文
摘要:一:主框架分析: 1:主框架的效果图如下:底部有一个tabBar,点击tabBar按钮切换首页,信息,发现 和我几个界面。则考虑将UITabBarController作为窗口的根视图控制器,所以新建类继承UITabBarController,用来封装主框架 : 2:封装根视图控制器UITabBarC
阅读全文
摘要:一:CocoaPods的安装 我们可以用淘宝的Ruby镜像来访问cocoapods。按照下面的顺序在终端中敲入依次敲入 为了验证你的Ruby镜像是并且仅是taobao,可以用以下命令查看: $ gem sources -l 此时会打开项目根目录下的Podfile文件,可对该文件进行编辑:其中的tar
阅读全文
摘要:一:在开始项目之前,首先配置好项目的环境: 1:设置好新建类的前缀,class Prefix :如图 : 2:设置应用所支持的屏幕方向:ios应用默认支持竖屏,横屏向左,横屏向右(也就是手机头部向左或是向右,若想使模拟器的屏幕方向发生旋转,则可采用command + 上下左右箭头,其中command
阅读全文
摘要:注意:switch语句当两者情况相同时,可以并列写在一起,最后不要忘记开启检测 [manager startMonitoring];
阅读全文
摘要:一:图片轮播器效果如图:能实现自动轮播,到最后一页时,轮播回来,可以实现拖拽滚动 二:代码: 三:知识点总结 1:创建定时器: 1:NSTimer *timer = [NSTimer timerWithTimeInterval:2 target:self selector:@selector(cha
阅读全文
摘要:一:瀑布流框架的应用:将封装好的瀑布流框架导入,遵守协议 二:代码: 知识点分析:1:利用MJEXtension将plist文件转化成模型数组:NSArray *newShops = [HMShop objectArrayWithFilename:@"2.plist"]; [self.shops a
阅读全文
摘要:一:瀑布流框架封装的实现思路:此瀑布流框架的封装仿照tableView的底层实现,1:每个cell的frame的设置都是找出每列的最大y值,比较每列的最大y值,将下一个cell放在最大y值最小的那一列,并更新最大y值,继续比较设置frame。2:还涉及了类似于tableView缓存池的处理 瀑布流效
阅读全文
摘要:一:1:级联菜单可以使用两个tableView来实现,也可以利用父子控制器,两个控制器来实现,根视图控制器作为两个控制器的父控制器,来管理两个子控制器。2:将左右菜单分别交给两个控制器去管理,对于一些复杂的业务逻辑,涉及大量回调操作,业务逻辑也要相对复杂,则不建议采取封装成view去处理,最好还是利
阅读全文
摘要:一:父子控制器的应用:效果如图: 二:代码 三:知识点总结: 1:用static const定义基本数据,或是字符串来代替宏定义来节省内存 ,利用父子控制器,先将子控制器添加到父控制器上,此时父控制器最子控制器有一个强引用,只要父控制器在,则子控制器就会存在,不会销毁。子控制器在,子控制器就会对其上
阅读全文
摘要:一:类似于网易的抽屉效果,启动有广告,进入主界面后,点击左上角按钮,侧滑左抽屉,点击右上角,侧滑出右抽屉。点击左抽屉按钮,对视图进行切换 。 二代码: 1:启动图展示广告界面实现:先吧启动图控制器作为窗口的根视图控制器,展示完广告消失后,再切换窗口的根视图控制器为主控制器。其中窗口指的是项目中的主窗
阅读全文