swift
iOS开发疯狂者
这个作者很懒,什么都没留下…
展开
-
视频播放
0.倒入框架import AVFoundationimport AVKit1.懒加载创建视频播放器lazy var playerVC : AVPlayerViewController = { let tempPlayerVC = AVPlayerViewController() // 设置画中画 tempPlayerVC.allowsPictureInPicturePlayback = true l原创 2020-11-29 11:41:15 · 430 阅读 · 0 评论 -
远程播放音乐
0.倒入框架import AVFoundation1.懒加载播放器lazy var player : AVPlayer = { let url = URL(string: "http://cc.stream.qqmusic.qq.com/C100003j8IiV1X80aw.m4a?fromtag=52") let item = AVPlayerItem(url: url!) let tempPlayer = AVPlayer(playerItem:原创 2020-11-29 11:40:44 · 416 阅读 · 0 评论 -
音乐播放
0.倒入框架import AVFoundation1.懒加载创建音乐播放器(并且直接设置一些属性)lazy var player : AVAudioPlayer? = { let url = Bundle.main.url(forResource: "235319.mp3", withExtension: nil) do { // 创建播放器 let tempPlayer = try AVAudioPlayer(cont原创 2020-11-26 21:07:32 · 343 阅读 · 0 评论 -
音效播放
直接封装成工具类,如果使用直接调用方法[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xwXh0dP7-1606395972409)(evernotecid://6D5FC5B5-BD49-4B4B-BFFA-512349E82058/appyinxiangcom/26192998/ENResource/p62)]0.倒入框架import AVFoundation1.代码实现class AudioTool: NSObject { class func原创 2020-11-26 21:06:32 · 154 阅读 · 0 评论 -
录音
0.倒入框架import AVFoundation1.懒加载录音对象lazy var record : AVAudioRecorder? = { // url : 录音文件的路径 // setting : 录音的设置项 let url = URL(fileURLWithPath: "/Users/liuhongtao/Desktop/录音/abc.caf") let configDic : [String : Any] = [原创 2020-11-26 20:52:53 · 84 阅读 · 0 评论 -
获取通讯录
0.导入框架import ContactsUI1.创建联系人选择控制器let vc = CNContactPickerViewController()1.1 设置代理接收用户点击的联系人vc.delegate = self2.弹出控制器present(vc, animated: true, completion: nil)3.实现代理方法// 取消选择联系人时调用 func contactPickerDidCancel(_ picker: CNContactPickerVi原创 2020-11-24 18:34:03 · 320 阅读 · 0 评论 -
应用间跳转
添加应用的scheme我们如果想要从一个应用跳转到另外一个应用,还需要设置一个白名单在item里面写上我们刚刚设置的shceme普通跳转(从一个应用跳转到另外一个应用)override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { let url = URL(string: "Wechat:") if UIApplication.s原创 2020-11-24 18:33:29 · 448 阅读 · 0 评论 -
UIDunamic(物理仿真器)
创建物理仿真器lazy var animator : UIDynamicAnimator = { let tempAnimator = UIDynamicAnimator(referenceView: view) return tempAnimator }()重力func gravity() -> Void { // 1.仿真行为 let behavior = UIGravityBehavior(items: [box1]原创 2020-11-24 18:31:17 · 89 阅读 · 0 评论 -
摇一摇
实现方法即可摇一摇开始override func motionBegan(_ motion: UIEvent.EventSubtype, with event: UIEvent?) { print("摇一摇开始") }摇一摇结束override func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?) { print("摇一摇结束") }摇一摇取消overrid原创 2020-11-13 20:29:18 · 114 阅读 · 0 评论 -
加速计
0.倒入框架import CoreMotion1.创建运动管理者对象let manager = CMMotionManager()2.判断加速计是否可用if !manager.isAccelerometerAvailable { print("加速计设备损坏") return }2.1设置采样间隔(1秒钟5次)manager.accelerometerUpdateInterval = 1.0 / 53.开始采集(推模式:原创 2020-11-13 20:28:34 · 92 阅读 · 0 评论 -
距离传感器
1.开启距离传感器功能UIDevice.current.isProximityMonitoringEnabled = true2.监听物体靠近或者离开设备的通知 NotificationCenter.default.addObserver(self, selector: #selector(stateChange), name: UIDevice.proximityStateDidChangeNotification, object: nil)3.通知所调用的方法@objc func stat原创 2020-11-13 20:28:04 · 232 阅读 · 0 评论 -
本地通知
请求授权(在AppDelegate.swift文件中书写)func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { registerAuthor() return true } // 请求授权 func register原创 2020-11-13 20:27:36 · 179 阅读 · 0 评论 -
使用照片选择器
1.判断数据源是否可用if !UIImagePickerController.isSourceTypeAvailable(.photoLibrary) { return }2.创建照片选择控制器let ipc = UIImagePickerController()3.设置照片源ipc.sourceType = .photoLibrary4.设置代理ipc.delegate = self5.弹出选择照片控制器present(ipc, animated: true, compl原创 2020-10-07 18:27:35 · 162 阅读 · 0 评论 -
如何修改modal(弹出控制器)出来的控制器的位置以及大小
1.创建弹出的控制器 let popVc = PopoverViewController() popVc.modalPresentationStyle = .customPopoverViewController这是我自己创建的控制器,继承自UIViewController,原因是方便我管理给控制器设置modalPresentationStyle属性为custom,因为只有设置了这个属性,我们在弹出控制器的时候后面的控制器才不会被移除,并且只有设置了原创 2020-09-21 16:11:05 · 1938 阅读 · 2 评论 -
使用动画(旋转)
1.创建动画let rotationAnim = CABasicAnimation(keyPath: "transform.rotation.z")transform.rotation.z这个是旋转的方向(z轴方向旋转)2.设置动画属性// 从哪里开始旋转(从0开始) rotationAnim.fromValue = 0// 旋转到哪里(旋转一圈) rotationAnim.toValue = (Double.pi * 2)// 旋转这么一圈的时间(5s)原创 2020-09-20 18:10:48 · 369 阅读 · 0 评论 -
便利构造方法(自己给一个类书写一个构造方法)
便利构造方法的特点通常都是写在extension里面init前面需要加上convenience需要明确的调用self.init()convenience:便利,使用convenience修饰的构造函数叫做便利构造函数便利构造函数通常用在对系统的类进行构造函数的扩充时使用例子(我们给UIButton书写一个便利构造函数)(完整的文件代码)import UIKitextension UIButton { // 便利构造函数(自己书写一个构造函数)原创 2020-09-09 21:43:53 · 194 阅读 · 0 评论 -
如何书写一个类方法
Swift中的类方法是以Class开头的方法比如我给UIButton书写一个类方法class func creatButton(imageName : String , backgroundImageName : String) -> UIButton { // 创建button let button = UIButton() // 设置属性 button.setImage(UIImage(named: image.原创 2020-09-09 21:43:23 · 196 阅读 · 0 评论 -
Swift中异常的处理方式
如果在调用系统某一个方法时,该方法最后有一个throws.说明该方法会抛出异常,如果一个方法会抛出异常,那么需要对该异常进行处理会抛出异常的方法JSONSerialization.jsonObject(with: <data数据>, options: .mutableContainers)处理方式方式一:try方式 程序员手动处理异常do { try JSONSerialization.jsonObject(with: <data数据>, options: .m原创 2020-09-06 21:34:51 · 276 阅读 · 0 评论 -
将一个json文件通过某些方式转换成我们的数组,并且可以遍历
1.获取文件路径guard let jasonPath = Bundle.main.path(forResource: "<文件名称>", ofType: "<文件名称的后缀>") else{ print("没有获取到文件路径") return}如果在文件名称里面已经写上了后缀,在type中就可以填写nil2.通过文件路径将文件转成data数据guard let jsonData = NSData(contentsOfFile: <文件的路径原创 2020-09-06 21:34:20 · 368 阅读 · 0 评论 -
类的属性监听器
在OC中我们可以重写set方法来监听属性的变化Swift中可以通过属性观察者来监听和响应属性值的变化通常是监听存储属性的改变(对于计算属性,我们不需要定义属性观察者,因为我们可以在计算属性的setter中直接观察并响应这种值的变化)我们通过设置以下观察方法来定义观察者willSet:在属性值被存储之前设置。此时新属性值作为一个常量参数被传入,该参数名默认为newValue,我们可以自己定义该参数名didSet:在新属性值被存储后立即调用。与willSet相同,此时传入的是属性的旧值,默认参数名.原创 2020-08-19 22:35:32 · 166 阅读 · 0 评论 -
自定义类的构造函数
介绍构造函数类似于OC中的初始化方法:init方法默认情况下在创建一个类时,必然会调用一个构造函数即便是没有编写任何构造函数,编译器也会提供一个默认的构造函数如果是继承自NSObject,可以对父类的构造函数进行重写重写构造函数class Person : NSObject{ var age : Int = 0 var name : String? = niloverride init() { // 在构造函数中,如果没有明确super.init(),那么系原创 2020-08-19 22:35:00 · 449 阅读 · 0 评论 -
类的属性定义
介绍Swift中类的属性有多种存储属性:存储实例的常量和变量计算属性:通过某种方式计算出来的属性类属性:与整个类自身相关的属性定义存储属性存储属性是最简单的属性,他作为类实例的一部分,用于存储常量和变量可以给存储属性提供一个默认值,也可以在初始化方法中对其进行初始化class Student : NSObject { var age : Int = 0 var name : String? = nil var mathScore : Double =原创 2020-08-19 22:34:30 · 1267 阅读 · 0 评论 -
类的定义
类的介绍和定义Swift也是一门面向对象开发的语言面向对象的基础是类,类产生了对象class 类名 : SuperClass{ // 定义属性和方法}class是Swift中的关键字,用于定义类注意定义的类,可以没有父类,那么该类是rootClass通常情况下,定义类时,继承自NSObject(非OC的NSObject)创建类class Person : NSObject{ var age : Int = 0}创建类对应的对象let p = Person()原创 2020-08-19 22:33:58 · 83 阅读 · 0 评论 -
函数
介绍函数相当于OC中的方法函数的格式如下func 函数名(参数列表) -> 返回值类型{ 代码块 return 返回值}func是关键字,多个参数列表之间可以用逗号(,)分隔,也可以没有参数使用箭头"->"指向返回值类型如果函数没有返回值,返回值为Void,并且"->返回值类型"部分可以省略常见的函数类型1.没有参数,没有返回值func about() -> Void{ print("iPhone12Pro")}about()原创 2020-08-16 23:03:11 · 90 阅读 · 0 评论 -
可选类型
介绍概念:在OC开发中,如果一个变量暂停不使用,可以复制为0(基本属性类型)或者赋值为空(对象类型)在swift开发中,nil也是一个特殊的类型,因为和真实的类型不匹配是不能赋值的(swift是强类型语言)但是在开发中赋值nil,在所难免,因此推出了可选类型可选类型的取值:空值有值1.定义可选类型方式一:常规方式(不常用)var name : Optional<String> = nil方式二:语法糖(常用)var Name : String? = nil2原创 2020-08-16 23:02:42 · 170 阅读 · 0 评论 -
元组
介绍元组是Swift中特有的,OC中并没有相关类型它是一种数据结构,在数学中应用广泛类似于数组或者字典可以用于定义一组数据组成元素的数据可以称为“元素”使用元组(一般用作方法的返回值)1.元组最基本的写法let info = ("lht", 18, 1.88)// 取元素info.22.可以给元组中的元素起别名(常见)let info1 = (name : "wql", age : 22)// 取元素info1.nameinfo1.03.元组中元素的别名,就是元组的名原创 2020-08-16 23:02:08 · 287 阅读 · 0 评论 -
字典
介绍字典允许按照某个键来访问元素字典是由两部分集合构成的,一个键(key)集合,一个是值(value)集合键集合时不能有重复元素的,而值集合是可以重复的,键和值是成对出现的Swift中的字典Swift字典类型是Dictionary,也是一个范型集合字典的初始化使用let修饰的字典是不可变字典使用var修饰的字典是可变字典1.定义字典// 1> 定义不可变字典// 系统自动判断后面[]中存放的是键值对,还是一个一个的元素let dict = ["name":"lht",原创 2020-08-13 22:58:25 · 115 阅读 · 0 评论 -
数组
介绍数组(Array)是一串有序的由相同类型元素构成的集合数组中的集合元素是有序的,可以重复出现Swift中的数组swift数组类型是Array,是一个范型集合初始化数组分成:可变数组和不可变数组使用let修饰的数组是不可变数组使用var修饰的数组是可变数组1.定义数组// 1> 定义不可变数组:使用let修饰标识符定义出来的数组就是不可变数组let array = ["HTl", "WQl", "ZXL", "KWx"]// 2> 定义可变数组:使用var修饰原创 2020-08-13 22:57:54 · 125 阅读 · 0 评论 -
字符串
介绍字符串在任何的开发中使用都是非常频繁的OC和Swift中字符串的区别在OC中字符串类型时NSString,在Swift中字符串类型是StringOC中字符串@"",Swift中字符串""使用String的原因String是一个结构体,性能更高NSString是一个OC对象,性能略差String支持直接遍历Swift提供了String和NSString之间的无缝转换使用1.定义字符串let string = "Hello"2.遍历字符串for chara in strin原创 2020-08-13 22:57:26 · 103 阅读 · 0 评论 -
Swift初体验
什么是Playground是什么?从Xcode6开始出现(Swift开始出现)翻译为:操场/游乐场对于学习Swift基本语法非常方便所见即所得(快速查看结果)语法特性发上改变时,可以快速查看Swift最基本的语法变化导入框架import UIKit定义标识符时,必须声明该标示符是变量还是常量声明标识符的格式:变量/常量关键字 名称:数据类型语句结束时不需要加1.如果同一行有多个语句,则依然需要加2.但是不建议一行多条代码Swift重的打印语句:print(打原创 2020-08-11 22:15:17 · 83 阅读 · 0 评论 -
常量&变量
什么是常量和变量在Swift中规定:在定义一个标识符时必须明确说明该标识符是一个常量还是变量使用let来定义常量,定义之后不可以修改使用var来定义变量,定义之后可以修改常量和变量的基本使用import UIKitlet a : Int = 10// 错误写法:当一个字段定义为常量时是不可以修改的// a = 20var b : Int = 20// 因为b定义为变量,因此是可以修改的b = 30常量和变量的实用注意:注意:在真实使用过程中,建议先定义常量,如果需要修改原创 2020-08-11 22:16:11 · 71 阅读 · 0 评论 -
Swift中数据类型
Swift类型的介绍Swift中的数据类型也有:整型/浮点型/对象类型/结构体类型等等先了解整型和浮点型整型1.有符号Int8:有符号8位整数Int16:有符号16位整数Int32:有符号32位整数int64:有符号64位整数Int:和平台相关(默认,相当于OC的NSInteger)2.无符号UInt8:有符号8位整数UInt16:有符号16位整数UInt32:有符号32位整数UInt64:有符号64位整数UInt:和平台相关(常用,相当于OC的NSUInteger)(默认)原创 2020-08-11 22:16:56 · 189 阅读 · 0 评论 -
Swift中基本运算
Swift中在进行基本运算时必须保证类型一致,否则会出错相同类型之间才可以进行运算因为Swift中没有隐式转换数据类型的转化Int类型转化成Double类型:Double(标识符)Double类型转化成Int:Int(标识符)let a = 10let b = 3.14// 错误写法// let c = a + b// 正确写法let c = Double(a) + blet c = a + Int(b)...原创 2020-08-11 22:17:23 · 101 阅读 · 0 评论 -
逻辑分支(if-eles if-三目)
一、分支的介绍分支即if/switch/三目运算符等判断语句通过分支语句可以控制程序的执行流程二、if分支语句和OC中if语句有一定的区别判断句可以不加()在Swift的判断句中必须有明确的真假不再有非0即真必须有明确的Bool值Bool有两个取值:false/true// OC if//if (判断句){////}// Swift if/* 1> if后面的()可以省略 2> 判断句不再有非0/nil即真,判断句必须有明确的真假(Bool--->原创 2020-08-11 22:18:04 · 457 阅读 · 0 评论 -
逻辑分支(guard用法)
guard的使用guard时Swift2.0新增的语法它与if语句非常类似,它设计的目的是提高程序的可读性guard语句必须带有else语句,它的语法如下当条件表达式为true时候跳过else语句中的内容,执行语句组内容条件表达式为false时候执行else语句中的内容,跳转语句一般是return、bread、continue和throw注意:必须在函数当中使用import UIKitlet age = 20//func online(age : Int){// if a原创 2020-08-11 22:18:35 · 356 阅读 · 0 评论 -
while和dowhile的使用
whilewhile后面的()可以省略while后面的判断没有非0即真var number = 10while number > 0 { print(number) number-=1}do whileswift中的dowhile循环需要写成 repeat whilevar number = 10repeat { print(number) number-=1}while number > 0...原创 2020-08-11 22:20:06 · 679 阅读 · 0 评论 -
for循环的使用
基本用法(swift3之后已经放弃)for var i = 0; i < 10; i++{ print(i)}for in写法for i in 0..<10 { print(i)}for in写法(特殊)在swift中如果一个标识符不需要使用,可以用_来代替for _ in 0...9 { print("Hello")}...原创 2020-08-11 22:19:36 · 115 阅读 · 0 评论