自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

rv0p111

学习的脚步

  • 博客(25)
  • 收藏
  • 关注

原创 ios-transform的rotated的应用

在Swift我们可能都使用过self.iconView.transform.rotated(by: CGFloat(2*Double.pi)),这个代码,然而如果我们直接这么写,这个view是不会旋转的,因为这个旋转动画的特点就是顺时针优先的原则和就近原则,比如你正好让它转一圈,它觉得呆着不动挺好了,就不会去转了,这个时候如果我们稍微改变下旋转的角度就不一样了,还有就是如果我们想要改变旋转控件的方

2017-09-30 17:30:35 964

原创 ios-图片保持等比例显示

我们如果用过QQ,微博都知道如果朋友圈刷新,显示别人发的微博或者动态显示单张图片,其实宽高比是和用户上传的照片的宽高比是一样的。这样对用户的视觉效果来说是比较好了,如果我们把显示单张图片的宽高固定死了,那可能用户体验就不会太好。如果我们想显示按照比例显示的话。我们有两种方法一种就是把图片的二进制数据下载到本地,然后再将这个二进制数据转换成图像,然后我们就能知道这个图像的宽和高了。另外一种就

2017-09-29 11:47:42 1427

原创 ios-调度组的使用补充

在日常开发中我们使用调度组的情况可能会比较少,而我们如果使用了调度组一般是使用这种形式的,因为这种形式的调度组我们容易理解也比较容易上手。如下所示 void dispatch_group_async(dispatch_group_t group, dispatch_queue_t queue, dispatch_block_t block) { d

2017-09-29 08:38:17 398

原创 ios-tableView的行高计算

如果我们设置了预估的行高也就是tableView.estimatedRowHeight = 100这样的话,当前显示的行高会被调用三次的如果我们没有设置预估的行高,就会把多个cell的行高算三遍。然后再算进入屏幕范围的Cell的高度。前面是从0开始的,如下图所示。当我们滚动到第四个的时候又重新计算了三次行高

2017-09-27 22:47:17 683

原创 ios-自动布局约束的问题

目前的自动布局的框架有两个框架是很好用的一个就是SnapKit 还有个就是Masonry,为什么要使用框架,因为苹果自带的框架我们使用起来代码写的太多了。所以我们可以使用第三方框架来编写。其中这里补充一点就是我们如果已经给一个控件添加过约束,我们还想去修改的话,我们只需要通过下面这个代码进行判断,满足条件就可以修改了。 //通过判断contenView的约束,然后根据属性和用户对象来判断约束是

2017-09-27 13:55:47 348

原创 ios-sizeToFit

对于sizeToFit,大家应该都用过,这里记录下关于它的一些知识。我们一般使用sizeToFit(),一般是对按钮,标签,图片使用的可能会比较多,我们是不能重写sizeToFit这个方法,但是我们可以重写sizeThatFits这个方法,因为sizeToFit就会去调用sizeThatFits这个方法.

2017-09-27 13:26:34 461

原创 ios-动态改变高度的注意点

在开发中,如果我们的任务是要去做到根据某某东西,去动态的改变高度,一定要先去测试我们之前做的那个方法可以不可以直接支持我们去改,就比如说我们如果需要在cell中计算高度,就比如说我们是通过自动计算行高来设置cell的高度的。//先设置预估行高 tableView.estimatedRowHeight = 400 //再设置自动计算行高 tableView.

2017-09-27 12:42:19 734

原创 ios-Swift中的闭包

关于闭包,其实有几个知识点如果理解了,可能就会比较轻松了1、函数名其实就是指向代码区的一个指针地址2、所以我们在运行时,调用的函数就是通过函数的地址去找到第一句代码在哪里,然后再去执行。我们定义一个函数,函数的参数是一个闭包,然后我们给这个参数传入函数的地址是可以的。比如说这样子func test() -> () { print("hello world")

2017-09-25 23:22:52 309

原创 ios-tableView自动计算行高

最近通过学习了解到一个东西就是tableView可以自动的计算行高了,只需要配合autoLayout来使用就可以了先设置如下所示的代码 //先设置预估行高 tableView.estimatedRowHeight = 200 //再设置自动计算行高 tableView.rowHeight = UITableViewAutomaticDimens

2017-09-25 19:35:34 1174

原创 ios-自动布局的基本原理

使用自动布局开发,我们最好遵守下面的一些规定         所有使用约束设置位置的控件,不要再去设置frame         因为自动布局系统会根据设置的约束,自动的计算控件的frame         会在layoutSubviews函数中进行设置frame         如果我们去主动的修改了frame,会引起自动布局系统的计算错误         不要在layout

2017-09-23 14:32:29 690

原创 ios-Swift中设置全局外观

一般我们设置navigationBar和UITabBar全局外观的话可以这么设置,在appDelegate文件中进行设置,在这里有一点需要注意的是修改导航栏的全局外观,一定要在创建控件之前进行设置,不然会出问题,还有就是我们//在Swift中我们可以自己创建一个文件来代替.pch文件中一些全局变量的使用,修改起来比较方便。///设置navigationBar和tabbar的外观,我们一般都是在

2017-09-21 07:26:40 434

原创 ios-Swift中的extension

在Swift中的extension中只能写便利构造函数,不能写指定的构造函数,因为extension其实和OC中的分类是很像的,在OC中的分类的功能其实就是这个类的功能结构我已经写好了,你需要做的就是去添加一些额外的功能。不能去定义存储型的属性,因为你一旦定义了,就表示你这个类的结构被改变了。我们做扩展只是对原有的方法进行扩展,因为比如说我们在类当中一个指定的构造函数已经写好了,这个时候我们在ex

2017-09-20 19:25:58 360

原创 ios-AFN中默认返回的数据转换成二进制数据

在我们通过AFN去访问接口,获取的数据,是自动的帮我们做了反序列化,我们看不出类型是什么,这样我们在字典转模型的时候就不好去设置对应属性的类型是什么,如果我们想要知道具体数据的类型是什么,我们可以这们做,如下代码所示 //如果我们要知道返回的数据内容的类型,我们应该先转换成字符串格式,然后再看具体的数据类型,如果是数字的话就不会有引号

2017-09-20 07:45:10 1934

原创 ios-Swift中封装AFN中的GET和POST请求

当我们通过CocoaPods下载完AFN框架之后,我们想在工程中去应用它我们需要加一个import的头文件 import AFNetworking我们怎么去找这个头文件就是在我们这个项目中去寻找具体写法如下所示import UIKit//导入头文件import AFNetworking//定义请求的枚举enum ZXRequestMethod :String {

2017-09-18 17:53:00 694

原创 ios-OC封装AFN中的GET和POST方法

我们其实在写大型程序的时候最好不要直接让大型的框架直接进入项目中,因为这样耦合性会很强,你的程序就离不开AFN了,这样的情况肯定不是我们希望的,比如说AFN如果有重大的更新,我们如果用的是直接引入框架的方法,那我们需要改的东西有很多,如果我们通过封装一个工具类,来进行网络请求,这样的话,耦合性降低,实现的效果也是一样的。我们怎么进行封装,我们其实可以先去看AFN中内部的源代码是怎么实现的,AFN内...

2017-09-18 12:35:00 816

原创 ios-Swift中的单例写法

因为静态去的对象只能去设置一次数值,所以我们可以用静态常量来创建一个对象,从而得到单例的效果,如下代码所示 static let tool = SoundTools()在Swift中单例的写法和懒加载很类似,几乎一模一样了,如下所示 static var instance:SoundTools = { return SoundTools() }()这个也是在第一

2017-09-17 19:43:53 1095

原创 ios-VFL语言

苹果味了简化autolayout的编写,而推出了一种可视化的语言就是VFL,VFL的具体使用如下所示 /**使用VFL:可视化格式语言 H 水平方向 V 垂直方向 | 边界 []包装控件 views:表示是一个字典 [名字:控件名] - VFL 字符串中表示控件的字符串

2017-09-17 10:34:47 300

转载 ios-MVC VS MVVM

我们都知道以前的代码架构基本都是MVC的模式,让模型,视图,控制器这三个东西分别做自己的事情,但是这样会有缺点,可能一不小心你控制器里面所处理的逻辑代码太多,变成几万行,那我们就会难以进行维护。总的来说就是MVC模式存在下面几个问题,模型的代码比较少,控制器代码多了不好去测试。MVC模式的话其实就是控制器就是监听所有的事件的处理,调度和界面之间的来回切换这样就会产生使控制器会处理很多复杂的业务

2017-09-16 16:12:28 284

原创 ios-Swift中解除循环引用的三种方式

1、加一个标记,表示里面用到的self都是弱引用 test4 {[weak self] (name)->() in //self?表示如果对象一旦被释放了,就不再访问其属性或者方法 print(self?.view) }2、OC中的传统的方法 //由于weak修饰的属性在运行时可

2017-09-15 20:44:46 632

原创 ios-Swift处理异常的三种方式

1、我们手动的去捕捉异常 let jsonStr="lll" let jsonData=jsonStr.data(using: String.Encoding.utf8) //在Swift中options是存放在数组中,如果我们不想写,直接传入一个空数组就可以 do {

2017-09-15 20:14:30 573

原创 ios-Swift的只读属性和懒加载对比

在Swift中的只读属性可以这么写var title1:String? { get { return "MM" + (opti ?? "") } }简写是这样的 var title2:String? { return "MR" + (opti ?? "") }还有种叫法叫做计算型属

2017-09-15 18:29:15 700

原创 ios-Swift中的懒加载和getter、setter方法

Swift中的懒加载是比较简单的,最简单的做法就是我们可以直接这么写 lazy var person: Person = Person()还有种写法是下面这种 lazy var person: Person = { return Person() }()代码的执行过程是这样的,第一次访问属性的时候,会先去执行后面的闭包代码,将闭包的结果保存到这个p

2017-09-15 15:20:58 1172

原创 ios-Swift面向对象

在OC中我们对于构造函数可能了解的不是太多,但是在Swift中这个概念还是很常见的,构造函数其实就是去建立一个对象,给属性去分配空间,设置初始数值,swift中的构造函数都是init。在我们去给一个类设置属性的时候,应该去设置为变量。比如说类如下定义import UIKitclass Person: NSObject { //定义一个属性,类的属性一般都是可变的,如果

2017-09-15 10:42:20 326

原创 ios-const

简单的说下const的应用吧,其实我们如果想让一个变量只能在初始化赋值的时候可以改的话我们可以这么做,在这样定义int型变量的时候使其变成常量const在前面还是在后面其实是一样的。const int a =10int const a =10int const * a和 const int *a 其实是一样的,因为const都在*前面如果我们使用int * const p=&b 这个就是

2017-09-11 19:29:06 228

原创 ios-swift基础

在swift中用let来定义常量,是不能修改的,var定义的是变量是可以修改的在swift中我们最好尽量的去使用let,如果你必须要修改这个变量的时候再去用var,这样程序会更安全在swift中会根据设置数值的的代码,来确定常量或变量的类型整数的默认类型是Int Int默认是64位的长整型小数的默认类似是Double 精度更高在swift中,任何时候都不会去做隐式的

2017-09-09 11:16:29 444

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除