Swift语言学习之如何用swift写ProgressHUD

合集下载

从入门到精通学习Swift编程的完整教程

从入门到精通学习Swift编程的完整教程

从入门到精通学习Swift编程的完整教程本文旨在为初学者提供一份从入门到精通学习Swift编程的完整教程。

Swift是一种用于开发iOS、macOS、watchOS和tvOS应用程序的编程语言,它具有易于学习、强大和高效的特点。

本教程将按照以下顺序介绍Swift编程的基础知识、进阶内容和高级技巧。

一、Swift入门1. Swift简介在本节中,我们将介绍Swift编程语言的背景和基本特性,以及它与其他编程语言的比较。

2. 开发环境搭建在本节中,我们将提供详细的步骤,帮助您下载、安装和配置Swift编程环境。

3. 第一个Swift程序在本节中,我们将编写并运行您的第一个Swift程序,以便您了解Swift语法和基本结构。

4. 数据类型和变量本节将向您介绍Swift中的数据类型和变量的概念,帮助您掌握如何声明和使用它们。

5. 控制流在这一部分,您将学习如何使用条件语句和循环结构来控制程序的流程和执行。

6. 函数和闭包本节将详细介绍Swift中函数和闭包的使用方法,包括函数的定义、调用和参数传递等。

7. 集合类型您将了解Swift中的数组、字典和集合等集合类型,并学习如何使用它们来组织和处理数据。

二、Swift进阶8. 结构体和类在这一部分,您将深入探讨Swift中的结构体和类,并学习如何使用它们来创建自定义的数据类型。

9. 协议和扩展本节将介绍Swift中协议和扩展的概念,以及如何使用它们来实现代码的模块化和功能的扩展。

10. 错误处理您将学习如何使用Swift中的错误处理机制来处理程序中的异常情况,并编写更健壮的代码。

11. 泛型编程在本节中,我们将介绍Swift中的泛型编程,帮助您编写更灵活、可复用的代码。

三、Swift高级技巧12. 异步编程本节将介绍Swift中的异步编程模型,包括使用GCD和闭包来处理并发任务。

13. 内存管理在这一部分,您将学习如何在Swift中进行内存管理,包括使用自动引用计数(ARC)和解决循环引用等问题。

Swift-进度条(UIProgressView)的用法

Swift-进度条(UIProgressView)的用法

Swift-进度条(UIProgressView)的⽤法1,创建进度条1 2 3 4var progressView=UIProgressView(progressViewStyle:UIProgressViewStyle.Default) progressView.center=self.view.centerprogressView.progress=0.5 //默认进度50%self.view.addSubview(progressView);2,设置进度,同时有动画效果1progressView.setProgress(0.8,animated:true) 3,改变进度条颜⾊1 2progressView.progressTintColor=UIColor.greenColor() //已有进度颜⾊progressView.trackTintColor=UIColor.blueColor() //剩余进度颜⾊(即进度槽颜⾊)4,设置progressView的宽度(进度条长度)通常情况下,我们可以在初始化 progressView 的时候通过 frame 属性设置其宽度(进度条长度)。

⽐如下⾯样例,我在屏幕中放置⼀个横向宽度是200的进度条,其位置是⽔平居中。

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27import UIKitclass ViewController: UIViewController{override func viewDidLoad() {super.viewDidLoad()//将背景设为⿊⾊self.view.backgroundColor = UIColor.blackColor()//创建⼀个宽度是200的进度条let myProgressView = UIProgressView(frame: CGRectMake(0, 0, 200, 10)) //设置进度条位置(⽔平居中)yer.position = CGPoint(x: self.view.frame.width/2, y: 100) //进度条条进度myProgressView.progress = 0.3//把进度条添加到view中来self.view.addSubview(myProgressView)}override func didReceiveMemoryWarning() {super.didReceiveMemoryWarning()}}2,设置progressView的⾼度但我们会发现⽆论如何设置 progressView 的⾼度,其最终显⽰出来的⾼度都不会变化。

Swift基础语法学习总结

Swift基础语法学习总结

Swift基础语法学习总结1.基础1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释.1.2) swift使用print和println打印,它的传参是一个泛型,几乎所有类型都是可打印的.1.3) swift在语句后面加分号与否都是正确的,但是swift偏好的风格是不在结尾处加分号的.如果有多个语句,必须用分号隔开.1.4) 在一个数字中庸下划线(_)会被忽视,方便认出大数值的的数字,也可以在前面补零.1.5) swift不允许在不同种类型间做加减乘除,要先做类型转换或运算符重载.1.6) typealias 可以为一个类型指定另外一个名字,这样可以清晰的表达类型的意义.typealiasnewType = OldTypeName1.7) assert 断言表示自己抛出异常,assert 第一个参数表示通过而不抛异常的条件,第二个参数表示提示,第二个参数可以没有1.8) swift中的 = 赋值运算符没有返回值,所以不会犯 if a = 3 {}这样的错误了,运算符前后加空格,以免xcode不能识别2.变量2.1) let 定义常量,var 定义变量,let定义的必须在声明时指定初始值,普通的var声明也必须赋初始值.2.2) let 声明的变量不可再改变,而var变量可以再改变,但是你不能再声明一个已经声明的常量或变量.2.3) 可以在一行同时声明多个常量或变量,用逗号隔开;如果每个常量对应一个var或let只需要用分号隔开即可.2.4) 每个常量和变量都一定会有固定的类型,如果没有指定类型,swift会根据后面的赋值类型来推断.2.5) swift的命名不能使用保留字和箭头/开头不能用数字,没有其它任何规定,甚至都可以使用小狗小猫命名.2.6) 如果你想使用关键字来命名是不允许的,但是你可以在前后加上``来命名,比如`let`,非关键字加``命名也可以的.2.7) swift里可以声明元组,类型类似于(Int, String),你可以用var声明也可以用let声明,里面两个都会是变量或者常量2.8) 而元组的方式和直接分开声明两个变量和常量没多大区别,你可以把其中的变量拿出来单独用或当元组用,混合用也可以.2.9) 可以用元组名直接通过下标索引直接来访问元组里对应的值,比如aaa.0 aaa.12.10) 你可以在元组中跟元素命名,比如(code:404,message:"Not Found"),然后你就可以用aaa.code 和 aaa.message来访问3.类型3.1) int型的UInt8和Int32 都可以通过min和max来取最大值和最小值3.2) Double是64位浮点数,Float是32位浮点数,对小数自动推断是Double类型,除非是指定过类型的3.3) 可以跟指定为浮点类型的常量或变量赋一个整数值但是不能是整数变量,它会自动转换成浮点数.3.4) 显示指定类型的变量或常量不能跟它赋值一个不同类型的值,它不能做自动转换,除了跟浮点类型赋值一个整数数值3.5) 在指定类型后加一个?表示可选类型,它的意思是它可能为没有值为nil,然后你可以通过可选绑定或者判断是否为空来使用它.3.6) 如果是一个class的可选类型,你可以通过?.访问它的属性和方法,它是通过前者是否会相应后面的方法,如果能响应则执行,不能则返回nil3.7) ?其实是个语法糖,比如String?类型等价于Optional<String>类型,只是方便写而已,他和String类型本质是不同的3.8) 如果你不想用判断是否为空或者用可选绑定或者用.?来访问它,你可以用最直接最简单的!强制解包来使用,但前提是能保证非空3.9) 如果一个可选量没有值又强制解包会报错,一个可选类型会隐式赋值为nil,你也可以在使用中赋值为nil3.10) 之所以需要有可选类型是因为swift是类型绝对安全的语言,它需要你在使用变量时一定有值,但是这种可选类型太麻烦,所以产生了!类型,!类型本质应该就是可选类型3.11) 声明为!可选类型,也可以不做初始化,它相当于你在每次使用可选类型的时候加上了!进行强制解包,你就不需要再自己加!了,你需要自己保证它不为空,否则使用会出错4.字符串4.1) ... 表示闭区间/ ..< 表示开区间, == 表示值相等/=== 表示引用相同, + 可以直接加字符串或数组4.2) swift中的string是值类型,它在做常量变量赋值或函数中进行传递时都会做值拷贝,都是一个新的副本,swift只有在必要的情况下做拷贝4.3) 可以用for in 遍历字符串,用 count全局函数计算字符数,用isEmpty属性判断是否是空字符串,有hasPrefix判断前缀(后缀等)4.4) 可以用startIndex和endIndex获取开始和结束下标,用数组和下标的形式访问单个字符;还可以通过\()的方式生成字符串5.数组5.1) swift中的数组可以用[String]和Array<String>来声明,它们是同一个意思,赋值也直接用中括号[]表示就可以了,里面的值需要是同一个类型5.2) array 有count/isEmpty等属性,有append/insert/remove等方法,它可以直接 + 一个数组,它可以通过下标和下标区间来取值,区间取到的是一个数组5.3) for item in shoppingList / for (index, value) inenumerate(shoppingList) 两种遍历方式,后面一种会知道下标5.4) 可以通过[Double](count: 3, repeatedValue: 3.3) / Array(count: 3, repeatedValue: 2.5) 初始化一个数组5.5) 数组也是值传递,如果把数组a赋值给数组b,a和b就是两份拷贝,修改相互不会有影响6.字典6.1) 字典是通过 [String : String] / Dictionary<String, String> 声明的,形式也是用[a:b,c:d]这种形式,通过键访问值6.2) 可以直接通过a[b] = c 这种方式增加一个键值对,通过updateValue 和removeValueForKey来增加删除键值对6.3) 可以用for (airportCode, airportName) in airports / for airportCode in airports.keys 遍历键值对或键或值6.4) 可以直接赋值 [:] 来清空字典,键值是可以为Int的;和string,array一样,dictionary也是值拷贝7.Set7.1) 用Set<Int> 声明Set,和数组一模一样跟它赋值,也可以通过赋值[]清除,也必须是同一类型,也有insert/contains方法,isEmpty属性7.2) Set也有for in 遍历,有取两个集合的差交等做做排列的方法,也有判断子集超集等方法8.For循环8.1) for index in 1...5 的这个index只是在当前这个循环的作用域内,如果for循环外面也有一个index,随便修改也不会和它又什么影响8.2) for _ in 1...10 如果不需要循环的这个索引可以用下划线_代替,在swift中只要不需要那个值的一般都可以用_代替8.3) for var index = 0; index < 3; ++index 这种for循环也还是可以的9.Switch语句9.1) swift 中的switch必须穷举所有的可能,否则必须加default,穷举的时候在一个case后面可以放很多可能值,用逗号隔开就好9.2) 穷举可以是用...和..<表示的一个区间,对于元组可以一个用_通配符,另一个匹配,或者两个都匹配,或者两个都是区间(只有一个元素也可以做值绑定)9.3) 做统配的时候可以用var x/let x,或 let (x,y) 进行值绑定,其中var 声明的可以修改9.4) 当做let 做值绑定的时候可以在后面加上 where做条件判断.switch 不需要用break防止穿透,但是它还是会去下一个case判断条件去匹配,使用break还是可以直接跳出switch9.5) 在switch同样可以使用break/continue跳出一个标签。

swift present uiscreenedgepangesturerecognizer -回复

swift present uiscreenedgepangesturerecognizer -回复

swift presentuiscreenedgepangesturerecognizer -回复什么是UIScreenEdgePanGestureRecognizer?UIScreenEdgePanGestureRecognizer 是iOS 中的一个手势识别器,它用于识别从屏幕边缘拖动的手势。

与其他手势识别器不同的是,UIScreenEdgePanGestureRecognizer 只能从屏幕的边缘开始,无法从屏幕的其他区域开始。

这个手势通常用于创建类似侧滑返回的交互效果,通过从屏幕边缘拖动来触发特定的操作。

步骤一:创建UIScreenEdgePanGestureRecognizer要使用UIScreenEdgePanGestureRecognizer,首先需要创建一个实例。

在Swift 中,可以通过以下方式来创建一个UIScreenEdgePanGestureRecognizer 对象:swiftlet edgePanGesture = UIScreenEdgePanGestureRecognizer(target: self, action: #selector(handleEdgePan(_:)))这里的`target` 是手势识别器相关操作的目标对象,一般为当前视图控制器或者自定义的手势处理类。

`action` 则是处理手势的方法,方法的参数通常为一个`UIScreenEdgePanGestureRecognizer` 对象。

步骤二:将手势添加到视图中手势识别器创建好之后,需要将它添加到需要响应手势的视图中。

在Swift 中,可以通过以下方式将手势添加到视图中:swiftview.addGestureRecognizer(edgePanGesture)这里的`view` 是指需要响应手势的视图对象,可以是`UIViewController` 的`view` 属性,也可以是其他自定义的视图类对象。

Swift语言编程入门指南

Swift语言编程入门指南

Swift语言编程入门指南随着移动应用的飞速发展,编程也越来越受到人们的关注。

现在,很多人想学习编程,但是不知道从哪里开始。

如果你的目标是成为一个iOS开发者,那么Swift语言是一个你非常值得学习的编程语言。

Swift语言是由苹果公司推出的一门开发iOS应用的编程语言,自2014年发布以来,得到了广泛的关注和使用。

在这篇文章中,我将为大家介绍Swift语言的基础知识和编程入门指南。

Swift语言的特点1. 快速与安全:Swift编译器采用了现代编程语言中最先进的编译技术,因此编译速度很快。

同时,Swift语言还具有更安全的编程环境,可以避免一些常见的编程错误。

2. 简单易学:Swift语言的语法和C语言类似,非常容易学习。

与Objective-C相比,Swift语言更加简洁明了,代码更加易于维护。

3. 现代化:Swift语言在设计时考虑到了现代编程语言的最佳实践和编程模式,如面向对象编程、函数式编程等。

4. 开源:Swift语言是一个开源项目,与全球的开发者们一起共同发展和完善。

学习Swift语言的步骤1. 了解Swift语言的基础知识:在开始编写Swift代码之前,你需要掌握Swift语言的基本语法和数据类型等基础知识。

下面是Swift语言的一些基本概念:(1)变量和常量:Swift语言中的变量使用var来定义,常量使用let来定义。

(2)数据类型:Swift语言支持多种数据类型,包括整型、浮点型、布尔型、字符串等。

(3)控制流:Swift语言支持if语句、switch语句、for循环、while循环等控制流语句。

(4)函数:Swift语言支持函数式编程,函数是一个独立的模块,可以被多次调用。

2. 下载并安装Xcode:Xcode是苹果公司官方推出的一款综合性开发工具,包括Swift编译器、调试工具、界面设计器等。

你需要在Apple Store中下载并安装Xcode才能编写Swift代码。

3. 学习Swift语言的API:Swift语言提供了一些重要的API,如UIKit、Foundation等,它们提供了一些常用的函数和类。

Swift编程语言入门与实践指南

Swift编程语言入门与实践指南

Swift编程语言入门与实践指南Chapter 1: Introduction to Swift Programming LanguageSwift is a modern, powerful, and intuitive programming language developed by Apple for building iOS, macOS, watchOS, and tvOS applications. It is designed with a focus on safety, performance, and readability, making it an ideal choice for both beginners and experienced developers. In this chapter, we will explore the basic concepts of Swift programming and discuss its key features.1.1 Evolution of SwiftSwift was first introduced by Apple in 2014 as a successor to the Objective-C language. It aimed to address the limitations of Objective-C and provide a more efficient and easy-to-use language for developing Apple applications. Since its launch, Swift has undergone several updates, introducing new features and improvements to enhance the development experience.1.2 Benefits of SwiftSwift offers a plethora of benefits, making it a preferred choice for iOS app development. Some of the key advantages include:- Readability: Swift code is clean, concise, and easy to read, allowing developers to quickly understand and modify code.- Safety: Swift eliminates common programming errors by providing features like type inference, optionals, and automatic memory management.- Performance: Swift is built with performance in mind, offering fast execution and low memory footprint.- Interoperability: Swift is compatible with Objective-C, enabling developers to use existing libraries and frameworks alongside Swift code.- Community Support: Swift has a large and active community that provides abundant resources, tools, and libraries for developers.Chapter 2: Basic Syntax and Data Types2.1 Variables and ConstantsIn Swift, variables are declared using the "var" keyword, while constants are declared using the "let" keyword. Variables can be assigned different values, whereas constants have a fixed value that cannot be changed once defined.2.2 Data TypesSwift provides a wide range of data types, including integers, floating-point numbers, strings, booleans, arrays, dictionaries, and more. Each data type is optimized for performance and comes with a set of built-in methods and properties.2.3 Control FlowControl flow statements like if-else, switch, for-in loops, and while loops allow developers to control the execution flow of their programs. These statements can be used to make decisions, iterate over collections, or perform repetitive tasks.Chapter 3: Object-Oriented Programming in Swift3.1 Classes and ObjectsSwift supports object-oriented programming (OOP) concepts such as classes, objects, inheritance, and polymorphism. Classes are used to define blueprints for creating objects, while objects are instances of a class with their own set of properties and behaviors.3.2 Inheritance and PolymorphismInheritance allows developers to create hierarchies of classes, where a subclass inherits properties and methods from its superclass. Polymorphism enables objects of different types to be treated as instances of a common superclass, providing flexibility and extensibility to the codebase.3.3 Abstraction and EncapsulationAbstraction and encapsulation are fundamental principles of OOP. Abstraction allows developers to hide complex implementation details and provide a simplified interface. Encapsulation ensures that data andbehavior are bundled together within a class, promoting data integrity and code reusability.Chapter 4: Advanced Concepts in Swift4.1 GenericsGenerics in Swift enable developers to write flexible and reusable functions and types. They allow for the creation of code that can work with different types, providing type safety and eliminating code duplication.4.2 Optionals and Error HandlingOptionals are a powerful feature in Swift that allows for the representation of both a value and the absence of a value. Error handling mechanisms, such as try-catch blocks, facilitate graceful handling of errors and prevent program crashes.4.3 ConcurrencyConcurrency is crucial for building responsive and efficient applications. Swift offers several mechanisms, such as asynchronous programming with closures, Grand Central Dispatch, and operation queues, to handle concurrent tasks effectively.Chapter 5: Practical Application of Swift5.1 iOS App DevelopmentSwift is the preferred language for iOS app development, with its ability to build high-performance, visually appealing, and user-friendly applications. Developers can leverage the iOS SDK and various frameworks to create innovative apps for iPhones, iPads, and Apple Watches.5.2 Server-Side DevelopmentSwift is not limited to iOS app development; it can also be used for server-side development. Libraries like Vapor and Kitura provide extensive support for building powerful and scalable backend systems using Swift.5.3 Swift Package ManagerSwift Package Manager is a command-line tool that simplifies the management of dependencies in Swift projects. It allows developers to easily integrate third-party libraries and frameworks into their codebase, enhancing productivity and code quality.In conclusion, Swift is a versatile programming language that offers a wide range of features, making it suitable for various application development scenarios. With its intuitive syntax, safety features, and powerful frameworks, Swift empowers developers to build reliable, efficient, and feature-rich applications across multiple Apple platforms.。

Swift编程语言中文教程

Swift编程语言中文教程

for-in
可使用 for-in 来迭代字典中的每个元素,提供一对名字来使用每个键值对。 letinterestingNumbers = [ "Prime": [2, 3, 5, 7, 11, 13], "Fibonacci": [1, 1, 2, 3, 5, 8], "Square": [1, 4, 9, 16, 25], ] varlargest = 0 for(kind, numbers) in interestingNumbers { for number in numbers { if number > largest { largest = number }
关于 Swift
Swift 是一门用于开发 iOS 和 OS X 应用程序的新语言,基于 C 和 Object-C,但是没有 C 兼容性的限制。Swift 采用安 全的编程模式,并增加了许多新的现代模式,让编程更加的容易、灵活,让编程更加有乐趣。Swift 被目前成熟并很受 欢迎的 Cocoa 和 Cocoa Touch 支持,是重新思考如何做软件开发的时候了。 Swift 已经经过多年的酝酿。苹果公司通过改进现有的编译器,调试器和基本框架奠定了 Swift 的基础。我们通过自 动引用计数(ARC)简化了存储管理。我们的框架协议栈,建立在坚实的基础框架和 Cocoa 之上,并且更加新潮和标准 化。Objective-C 本生已经实现模块化,允许框架使用新的编程语言。由于这个基础,我们现在可以引入新的语言开发 未来的苹果软件。 Objective-C 的程序员对 Swift 会很容易上手,因为它采用 Objective-C 相同的命名规则以及 Objective-C 的动态对 象模型。Swift 可以无缝的调用 Cocoa 框架,并且可以和 Objective-C 混编。Swift 引入了许多新的特性,统一了编程 语言程序和面向对象部分。 Swift 对于新接触的程序员也相当友好。它是第一个工业品质系统的编程语言,Swift 编写的程序可以及时看到效果, 并且是一门很有趣的脚本语言。Swift 无需写完代码后再编译运行。 Swift 结合了现代编程语言的思维,广泛的结合苹果工程师的智慧。Swift 的编译器正对性能进行了优化,扩展等无 需其它的开销。它的设计从“hello,word”扩展到整个操作系统。所有的一切值得开发者和苹果公司对 Swift 的投资。 Swift 是一种优雅的方式来编写 iOS 和 OS X 应用程序,会持续加入新的功能和特性。我们对 Swift 充满信心。我们 迫不及待的想看到您用 Swift 编写的有趣 App。

swift语法案例

swift语法案例

swift语法案例
当然,以下是一个简单的 Swift 语法案例,它展示了如何创建一个简单的Swift 程序,该程序从用户那里获取两个数字,并计算它们的和:
```swift
// 1. 导入 Swift 语言的基本功能
import Foundation
// 2. 定义一个函数,该函数从用户那里获取两个数字并返回它们的和func calculateSum(num1: Int, num2: Int) -> Int {
return num1 + num2
}
// 3. 在主函数中调用上述函数
func main() {
// 获取用户输入的两个数字
let num1 = Int(readLine()!)
let num2 = Int(readLine()!)
// 计算这两个数字的和,并打印结果
let sum = calculateSum(num1: num1, num2: num2)
print("The sum of \(num1) and \(num2) is \(sum)")
}
// 4. 调用 main 函数开始执行程序
main()
```
在这个例子中,我们首先导入了 Foundation 模块,它为 Swift 提供了许多基本的函数和类。

然后我们定义了一个名为 `calculateSum` 的函数,该函数接受两个整数参数并返回它们的和。

在 `main` 函数中,我们从用户那里获取两个数字,调用 `calculateSum` 函数计算它们的和,然后打印结果。

最后,我们调用 `main` 函数来开始执行程序。

swift 写法 -回复

swift 写法 -回复

swift 写法-回复题目:Swift语言的基本特性和应用简介:Swift是一门由Apple公司开发的现代化编程语言,它结合了安全、快速和易读易写的特点,使开发人员能够更轻松地构建iOS、macOS、watchOS 和tvOS应用程序。

本文将深入探讨Swift语言的基本特性和它的应用领域。

第一步:Swift语言的起源和发展背景Swift于2014年发布,作为Objective-C的替代品,旨在提供更好的性能和灵活性。

它由苹果公司的开发者在许多编程语言和编程范例的基础上创造而成,受到了Cocoa和Cocoa Touch框架的启发。

第二步:Swift语言的基本特性1. 简洁易读:Swift采用清晰简洁的语法,减少了冗余代码。

相比Objective-C,Swift的语法更贴近自然语言,易于学习和理解。

2. 安全性:Swift提供了许多机制来增强应用程序的安全性。

它采用了类型安全的方式来防止错误类型间的混淆,并提供了选项序列,以消除常见的空指针错误。

此外,Swift还支持自动内存管理,减少了内存泄漏的可能性。

3. 快速性能:Swift在执行速度上比Objective-C更快。

它通过优化以及使用先进的编译器和优化器来提高代码的执行效率。

4. 可互操作性:Swift能够与Objective-C代码无缝交互,这允许开发人员在现有项目中逐步采用Swift语言。

此外,Swift还支持C和C++代码的集成。

第三步:Swift语言的应用领域1. iOS应用开发:Swift是开发iOS应用的首选语言。

它与iOS生态系统紧密结合,可以轻松访问各种API和库,从而实现高度优化和令人惊叹的用户体验。

2. macOS应用开发:Swift也可以用于开发macOS应用程序。

由于Swift 具备快速、安全和易读易写的特性,开发者可以更轻松地构建用户友好、功能丰富的macOS应用。

3. watchOS应用开发:借助Swift语言,开发者可以创建各种可穿戴设备的应用,从而为用户提供对Apple Watch的个性化体验。

swift 高级用法

swift 高级用法

swift 高级用法Swift 高级用法Swift 是一门新兴的编程语言,它既简单易学,又功能强大。

在使用Swift 进行编程时,如果只停留在基础用法上,那么无法充分发挥Swift 的优势。

因此,在这里我们将介绍一些 Swift 的高级用法。

一、泛型泛型是 Swift 中非常重要的一个特性。

它可以让我们写出更加灵活、通用的代码,并且可以避免代码重复。

泛型可以应用于函数、结构体、类和枚举等各种类型。

1. 泛型函数泛型函数是指可以接受任何类型的参数并返回任何类型的值的函数。

下面是一个简单的泛型函数示例:```func swapTwoValues<T>(_ a: inout T, _ b: inout T) {let temporaryA = aa = bb = temporaryA}```该函数接受两个参数,并将它们互换。

其中,`<T>` 表示这是一个泛型函数,`T` 是一个占位符类型名字,表示传入参数的类型。

2. 泛型类型除了函数外,Swift 还支持定义泛型类型。

下面是一个简单的栈结构体示例:```struct Stack<Element> {var items = [Element]()mutating func push(_ item: Element) {items.append(item)}mutating func pop() -> Element {return items.removeLast()}}```该结构体定义了一个栈,可以存储任何类型的元素。

其中,`<Element>` 表示这是一个泛型类型,`Element` 是一个占位符类型名字,表示栈中存储的元素的类型。

二、高阶函数高阶函数是指接受函数作为参数或返回函数作为结果的函数。

Swift 中有很多高阶函数,如 `map`、`filter`、`reduce` 等。

这些函数可以让我们写出更加简洁、优雅的代码。

(完整版)Swift语言编程手册

(完整版)Swift语言编程手册

(完整版)Swift语言编程手册介绍本文档旨在为用户提供关于Swift语言编程的详细手册,包括语言特性、基本语法、常用的编程模式以及各种开发工具和技术。

Swift语言特性Swift是一门现代化、高效且易于研究的编程语言。

它融合了多种编程语言的优点,同时提供了丰富的特性和语法糖来简化代码编写过程。

一些主要的特性包括:- 类型推断:Swift可以根据变量的初始赋值自动推断变量的类型,减少了类型声明的冗余。

- 可选类型:Swift引入了可选类型来处理可能为空的值,避免了空指针异常的发生。

- 函数式编程:Swift支持函数作为一等公民,可以将函数作为参数传递和返回值,这为函数式编程带来了便利。

- 强大的集合类型:Swift提供了多种强大的集合类型,如数组、字典和集合,提供了丰富的操作方法和语法。

- 内存管理:Swift采用自动引用计数(ARC)来管理内存,减轻了开发者的负担。

- 值类型和引用类型:Swift引入了结构体和枚举作为值类型,与类作为引用类型相对应,提供了灵活性和性能优势。

基本语法和控制流Swift的基本语法和控制流与其他编程语言相似,包括变量声明、常量声明、条件判断、循环等。

下面是一些基本语法的示例:var name = "Swift"let version = 5.0if version >= 5.0 {print("You are using Swift 5.0")} else {print("You are using an older version of Swift")}for i in 1...5 {print(i)}func greet(name: String) -> String {return "Hello, \(name)!"}let message = greet(name: "World")print(message)常用的编程模式为了更好地组织和管理代码,Swift常用的编程模式包括面向对象编程(OOP)、函数式编程(FP)和响应式编程(RP)。

swift学习(一)基础知识(基本数据类型,操作符,流控制,集合)

swift学习(一)基础知识(基本数据类型,操作符,流控制,集合)
可以用在函数的闭包参数上这意味着这个参数是唯一可被调用的或者用在函数调用时以参数的方式出现其意思是它的生命周期比函数调用的周期短这有助于一些小小的性能优化但最重要的是它屏蔽了闭包中对self
swift学 习 ( 一 ) 基 础 知 识 ( 基 本 数 据 类 型 , 操 作 符 , 流 控 制 , 集合)
/// If `self == nil`, returns `nil`. Otherwise, returns `f(self!)`. func map<U>(f: @noescape (T) -> U) -> U?
/// Returns `f(self)!` iff `self` and `f(self)` are not nil. func flatMap<U>(f: @noescape (T) -> U?) -> U?
关键字 共 60个
与声明有关的14个:class, deinit, enum, extension, func, import, init, let, protocol, static, struct, subscript, typealias, var 与语句有关的14个:break, case, continue, default, do, else, fallthrough, if, in, for, return, switch, where, while
?? 空值合并运算符
// 对 a 进行判断,如果不为 nil 则解包,否则就返回 b // a 必须是 optional 的 // b 必须和 a 类型一致 // 相当于三目运算符的简化版 var a: String? = "a" var b: String? = "b" var c = a ?? b // "a"

用swift创建复杂的加载动画

用swift创建复杂的加载动画

用swift创建复杂的加载动画时至今日,iOS 应用商店已经拥有超过了140万应用,让你自己的应用脱颖而出确实是个不小的挑战。

不过,在你的应用掉入默默无闻的大黑洞之前,你拥有一个小小的机遇窗,它能帮你吸引用户的注意。

想让你的用户喝彩尖叫,没有比应用加载界面更好的地方,在这个地方,你可以添加一个讨人喜欢的动画来作为你登陆或者认证流程的先导。

在这个教程中,你将要学会如何利用先进的技术来创建一个流畅并且迷人的动画。

开始吧!!从这里下载启动项目,保存在一个合适的路径并用Xcode打开。

打开HolderView.swift 。

在这个UIView 的子类中,你可以添加些子层(在Layers 的下级目录中可以找到),使之像上面的动画一样生动OvalLayer.swift: 这是第一层,它从零尺寸扩展,然后会有一小段时间的摇摆TriangleLayer.swift: 接下来的这个层TriangleLayer会在OvalLayer 摇摆的时候出现,当此视图转动时,OvalLayer 会缩小到零尺寸,并在TriangleLayer 中消失。

RectangleLayer.swift: 这个层是TriangleLayer 用于分类的可视化容器ArcLayer.swift: 这个层动画特效填充在RectangleLayer 中,这和杯子里填充了水(效果)非常相似打开OvalLayer.swift, 启动项目已经包含了用于初始化这个层的代码和所有你会在动画里用到的Bezier path(对象)。

你会看到expand(),wobble()和contract()方法都是空的。

你可以通过参考这个指导书来填充这些方法。

所有其他的*Layer (以layer结尾)的文件都用了相似的方式构建。

注意:如果你想要学习更多的Bezier paths,那就检出我们系列指导书Modern Core Graphics with Swift最后,打开ViewController.swift 查看addHolderView()方法,这个方法添加了一个HolderView 作为一个子视图,放到viewcontroller 视图的中间。

swift pkhud用法

swift pkhud用法

swift pkhud用法PKHUD是一个基于Swift编写的开源库,用于在iOS应用程序中显示HUD(Head-Up Display)指示器。

HUD指示器通常用于在应用程序执行长时间任务时向用户显示进度或状态信息。

使用PKHUD 可以轻松地在应用程序中添加这样的指示器。

要使用PKHUD,首先需要将其添加到项目中。

可以通过CocoaPods或Carthage等依赖管理工具来集成PKHUD。

在集成后,可以按照以下步骤使用PKHUD:1. 导入PKHUD库:在需要使用PKHUD的文件中,使用import PKHUD语句导入PKHUD库。

2. 显示HUD指示器:要显示HUD指示器,可以使用PKHUD.sharedHUD.show()方法。

这将在屏幕中央显示一个默认样式的HUD指示器。

3. 自定义HUD样式:可以通过设置PKHUD.sharedHUD.contentView来自定义HUD 的外观和行为。

例如,可以更改HUD的背景颜色、文本内容等。

4. 隐藏HUD指示器:当任务完成时,可以使用PKHUD.sharedHUD.hide()方法来隐藏HUD指示器。

5. 显示特定类型的HUD指示器:PKHUD还提供了不同类型的HUD指示器,如成功、错误、进度等。

可以使用相应的方法来显示这些特定类型的HUD指示器,例如PKHUD.sharedHUD.showSuccess()、PKHUD.sharedHUD.showError()等。

总的来说,使用PKHUD可以轻松地在iOS应用程序中添加HUD 指示器,以向用户显示任务的进度和状态信息。

通过导入库并调用相应的方法,可以根据需要自定义和显示不同类型的HUD指示器。

希望这些信息对你有所帮助。

Swift 操作说明说明书

Swift 操作说明说明书

操作说明Swift操作说明内容介绍 (4)功能特性 (4)气体整合(AI) (5)更换电池 (11)故障排除 (13)储存与保养 (14)检修 (14)文档历史 (15)规格 (16)Swift 操作说明本手册所用协定警告 本设备可能出现故障。

本设备可能会停止报告气体压力或者报告不准确的压力。

切勿冒险将自己的生命安危寄托于单一的信信息信息框包含实用建议。

警告介绍Shearwater Swift是一款先进的气体整合传感器,可测量潜水气瓶的气体压力,并将这一信息传输至兼容的潜水电脑。

请仔细阅读本手册,以发挥您的新传感器的最佳性能。

潜水运动存在风险,而不断学习是控制风险的最佳途径。

本手册提供了Shearwater Swift的安装和操作说明。

功能特性•兼容所有气体整合型Shearwater潜水电脑•随机传送间隔确保可靠地同时使用多个Swift传感器•先进的干扰规避系统保障了在使用多个传感器时的可靠性•尺寸小巧:76 x 34mm•可在调节器上进行简单的“无工具”安装和拆除•LED状态指示灯•额定深度达200msw•用户可自行更换的CR2电池气体整合(AI)Swift可与Shearwater潜水电脑连接,提供气体整合功能。

AI代表“Air Integration”(气体整合)。

指的是使用无线传感器测量潜水气瓶的气体压力,并将这一信息传输至潜水电脑以进行显示和记录的系统。

数据传输使用低频(38kHz)无线电通信。

潜水电脑内置的接收器接受这一数据并将其格式转为显示信息。

通信从传感器发送至电脑,无需电脑响应。

可设定两(或更多)个潜水电脑接收相同的单个或多个传感器的传输。

尽管这一功能英文原名的字面含义为“空气”整合,其他混合气体同样可以用于这一系统。

使用氧含量超过22%的混合气体时,请确保您接受过使用此类混合气体的恰当培训,并遵循恰当的清洁和材料兼容性指南。

Swift传感器采用氧气兼容材料制成。

关于无线压力测量传感器的说明自备式呼吸器的组件在欧盟传感器的安装在使用AI系统之前,您需要在潜水气瓶调节器一级头的HP(高压)端口上安装一个或多个传感器。

用swift创建复杂加载动画

用swift创建复杂加载动画
func addOval() {
layer.addSublayer(ovalLayer)
ovalLayer.expand()
} 这段代码首先添加了你上面创建的 OverLayer 的实例作为一个子层到视图层, 然后调用 expand() 方法,这是被切掉的需要你来填充的函数之一
1页
如有你有帮助,请购买下载,谢谢!
来到 OvalLayer.swift 文件,添加如下代码到 expand() 中: func expand() {
var expandAnimation: CABasicAnimation = CABasicAnimatio n(keyPath: "path")
expandAnimation.fromValue = ovalPathSmall.CGPath expandAnimation.toValue = ovalPathLarge.CGPath expandAnimation.duration = animationDuration expandAnimation.fillMode = kCAFillModeForwards expandAnimation.removedOnCompletion = false addAnimation(expandAnimation, forKey: nil) } 这个函数创建了一个 CABasicAnimation 的实例,这个实例用于改变椭圆从 ovalPathLarge.到 ovalPathSmall 的路径。启动项目为你提供了两者的 Bezier paths。 设 置 动 画 的 removedOnCompletion 的 值 为 false , fillMode 的 值 为 KCAFillModeForwards ,使得当动画结束的时候,椭圆保留它新的路径。 最 后 , 打 开 ViewController.swift , 在 view.addSubview(holderView) 下 的 addHolderView() 方法中添加如下的线条 holderView.addOval() 将 holdview 添加到 ViewController 的视图中后,调用 addOval 方法来启动动 画 构建并运行你的应用,你的动画现在就会看起来像下面(图例) 摇动椭圆 使用视图中扩张的椭圆,下一步就是在椭圆的步调中设置一些反弹,使之摇摆起 来 打开 HolderView.swift,在此类的底部,添加下面的函数 func wobbleOval() { ovalLayer.wobble() } 在 OvalLayer 中调用被切掉的方法 wobble(). 现在打开 OverLayer.swift,在 wobble() 中添加如下代码 func wobble() {

Swift语言学习之如何用swift写ProgressHUD

Swift语言学习之如何用swift写ProgressHUD

Swift语言学习之如何用swift写ProgressHUD//// ProgressHUD.swift// BiaoGeMusic//// Created by ljy-335 on 14-10-21.// Copyright (c) 2014年 uni2uni. All rights reserved. //import Foundationimport UIKit////// @brief 样式enum HYBProgressHUDStyle {case BlackHUDStyle /// 黑色风格case WhiteHUDStyle /// 白色风格}////// @brief 定制显示通知的视图HUD/// @author huangyibiaoclass HYBProgressHUD: UIView {var hud: UIToolbar?var spinner: UIActivityIndicatorView?var imageView: UIImageView?var titleLabel: UILabel?////// private 属性///private let statusFont = UIFont.boldSystemFontOfSize(16.0)private var statusColor: UIColor!private var spinnerColor: UIColor!private var bgColor: UIColor!private var successImage: UIImage!private var errorImage: UIImage!////// @brief 单例方法,只允许内部调用private class func sharedInstance() ->HYBProgressHUD {struct Instance {static var onceToken: dispatch_once_t = 0static var instance: HYBProgressHUD?}dispatch_once(&Instance.onceToken, { () -> Void inInstance.instance = HYBProgressHUD(frame: UIScreen.mainScreen().bounds)Instance.instance?.setStyle(HYBProgressHUDStyle .WhiteHUDStyle)})return Instance.instance!}override init(frame: CGRect) {super.init(frame: frame)hud = nilspinner = nilimageView = niltitleLabel = nilself.alpha = 0.0}required init(coder aDecoder: NSCoder) {fatalError("init(coder:) has not been implemented") }////// 公开方法////// 显示信息class func show(status: String) {sharedInstance().configureHUD(status, image: nil, isSpin: true, isHide: false)}/// 显示成功信息class func showSuccess(status: String) {sharedInstance().configureHUD(status, image: sharedInstance().successImage, isSpin: false, isHide: true) }/// 显示出错信息class func showError(status: String) {sharedInstance().configureHUD(status, image: sharedInstance().errorImage, isSpin: false, isHide: true) }/// 隐藏class func dismiss() {sharedInstance().hideHUD()}////// 私有方法///////// @brief 创建并配置HUDprivate func configureHUD(status: String?, image: UIImage?, isSpin: Bool, isHide: Bool) {configureProgressHUD()/// 标题if status == nil {titleLabel!.hidden = true} else {titleLabel!.text = status!titleLabel!.hidden = false}// 图片if image == nil {imageView?.hidden = true} else {imageView?.hidden = falseimageView?.image = image}// spinif isSpin {spinner?.startAnimating()} else {spinner?.stopAnimating()}rotate(nil)addjustSize()showHUD()if isHide {NSThread.detachNewThreadSelector("hideWhen Timeout", toTarget: self, withObject: nil)}}////// @brief 设置风格样式,默认使用的是黑色的风格,如果需要改成白色的风格,请在内部修改样式private func setStyle(style: HYBProgressHUDStyle) {switch style {case .BlackHUDStyle:statusColor = UIColor.whiteColor()spinnerColor = UIColor.whiteColor()bgColor = UIColor(white: 0, alpha: 0.8)successImage = UIImage(named: "ProgressHUD.bundle/success-white.png")errorImage = UIImage(named: "ProgressHUD.bundle/error-white.png")breakcase .WhiteHUDStyle:statusColor = UIColor.whiteColor()spinnerColor = UIColor.whiteColor()bgColor = UIColor(red: 192.0 / 255.0, green: 37.0 / 255.0, blue: 62.0 / 255.0, alpha: 1.0)successImage = UIImage(named: "ProgressHUD.bundle/success-white.png")errorImage = UIImage(named: "ProgressHUD.bundle/error-white.png")breakdefault:break}}////// @brief 获取窗口windowprivate func getWindow() ->UIWindow {if let delegate: UIApplicationDelegate = UIApplication.sharedApplication().delegate {if let window = delegate.window {return window!}}return UIApplication.sharedApplication().keyWindow}////// @brief 创建HUDprivate func configureProgressHUD() {if hud == nil {hud = UIToolbar(frame: CGRectZero)hud?.barTintColor = bgColorhud?.translucent = truehud?.layer.cornerRadius = 10hud?.layer.masksT oBounds = true/// 监听设置方向变化NSNotificationCenter.defaultCenter().addObserve r(self,selector: "rotate:",name: UIDeviceOrientationDidChangeNotification,object: nil)}if hud!.superview == nil {getWindow().addSubview(hud!)}if spinner == nil {spinner =UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge)spinner!.color = spinnerColorspinner!.hidesWhenStopped = true}if spinner!.superview == nil {hud!.addSubview(spinner!)}if imageView == nil {imageView = UIImageView(frame: CGRectMake(0, 0, 28, 28))}if imageView!.superview == nil {hud!.addSubview(imageView!)}if titleLabel == nil {titleLabel = UILabel(frame: CGRectZero)titleLabel?.backgroundColor = UIColor.clearColor()titleLabel?.font = statusFonttitleLabel?.textColor = statusColortitleLabel?.baselineAdjustment = UIBaselineAdjustment.AlignCenterstitleLabel?.numberOfLines = 0titleLabel?.textAlignment = NSTextAlignment.CentertitleLabel?.adjustsFontSizeToFitWidth = false}if titleLabel!.superview == nil {hud!.addSubview(titleLabel!)}}////// @brief 释放资源private func destroyProgressHUD() {NSNotificationCenter.defaultCenter().removeObser ver(self, name: UIDeviceOrientationDidChangeNotification, object: nil)titleLabel?.removeFromSuperview()titleLabel = nilspinner?.removeFromSuperview()spinner = nilimageView?.removeFromSuperview()imageView = nilhud?.removeFromSuperview()hud = nil}////// @brief 设置方向变化通知处理func rotate(sender: NSNotification?) {var rotation: CGFloat = 0.0switch UIApplication.sharedApplication().statusBarOrientation { case UIInterfaceOrientation.Portrait:rotation = 0.0breakcase .PortraitUpsideDown:rotation = CGFloat(M_PI)breakcase .LandscapeLeft:rotation = -CGFloat(M_PI_2)breakcase .LandscapeRight:rotation = CGFloat(M_PI_2)breakdefault:break}hud?.transform = CGAffineTransformMakeRotation(rotation)}////// @brief 调整大小private func addjustSize() {var rect = CGRectZerovar width: CGFloat = 100.0var height: CGFloat = 100.0/// 计算文本大小if titleLabel!.text != nil {var style = NSMutableParagraphStyle()style.lineBreakMode = NSLineBreakMode.ByCharWrappingvar attributes = [NSFontAttributeName: statusFont, NSParagraphStyleAttributeName: style.copy()]var option = esLineFragmentOriginvar text: NSString = NSString(CString: titleLabel!.text!.cStringUsingEncoding(NSUTF8StringEncoding)!, encoding: NSUTF8StringEncoding)rect = text.boundingRectWithSize(CGSizeMake(160, 260), options: option, attributes: attributes, context: nil)rect.origin.x = 12rect.origin.y = 66width = rect.size.width + 24height = rect.size.height + 80if width < 100 {width = 100rect.origin.x = 0rect.size.width = 100}}hud!.center = CGPointMake(kScreenWidth / 2,kScreenHeight / 2)hud!.bounds = CGRectMake(0, 0, width, height)var h = titleLabel!.text == nil ? height / 2 : 36imageView!.center = CGPointMake(width / 2, h)spinner!.center = CGPointMake(width / 2, h)titleLabel!.frame = rect}////// @brief 显示private func showHUD() {if self.alpha == 0.0 {self.alpha = 1.0hud!.alpha = 0.0self.hud!.transform = CGAffineTransformScale(self.hud!.transform, 1.4, 1.4)UIView.animateKeyframesWithDuration(0.15,delay: 0.0,options: UIViewKeyframeAnimationOptions.AllowUserInteraction, animations: { () -> Void inself.hud!.transform = CGAffineTransformScale(self.hud!.transform, 1.0 / 1.4, 1.0 / 1.4) self.hud!.alpha = 1.0}, completion: { (isFinished) -> Void in})}}////// @brief 隐藏private func hideHUD() {if self.alpha == 1.0 {UIView.animateKeyframesWithDuration(0.2,delay: 0.0,options: UIViewKeyframeAnimationOptions.AllowUserInteraction, animations: { () -> Void inself.hud!.transform = CGAffineTransformScale(self.hud!.transform, 0.35, 0.35) self.hud!.alpha = 0.0}, completion: { (isFinished) -> Void inself.destroyProgressHUD()self.alpha = 0.0})}}////// @brief 在指定时间内隐藏func hideWhenTimeout() {autoreleasepool { () -> () invar length = countElements(self.titleLabel!.text!)var sleepTime: NSTimeInterval = NSTimeInterval(length) * 0.04 + 0.5NSThread.sleepForTimeInterval(sleepTime)self.hideHUD() }}}。

SwiftUI控件详细介绍(上)

SwiftUI控件详细介绍(上)

SwiftUI控件详细介绍(上)UI控件⾸先介绍⼀下AppDelegate.swift@UIApplicationMain 调⽤了OC中的UIApplicationMain函数;UIApplicationMain是iOS应⽤程序的⼊⼝UIApplicationMain:a.创建了⼀个UIApplication对象,代表当前应⽤程序. 作⽤是⽤来检测当前应⽤程序状态的改变。

1.在这个⽅法中来搭建应⽤程序中的所有的界⾯2.获取应⽤程序需要展⽰的数据3.使⽤界⾯展⽰数据注意:如果不在这个⽅法中去创建window,那么程序会通过Main.storyboard去创建应⽤程序的界⾯b.创建⼀个遵守UIApplicationDelegate的协议的类的对象作为UIApplication的代理,作⽤是处理应⽤程序状态的改变(创建AppDelegate对象并且设置为UIApplication对象的代理)这个⾥⾯⼀个有六个⽅法分别是1.当应⽤程序已经启动成功后,会⾃动调⽤这个⽅法 application2.当应⽤程序将要成为⾮活跃状态的时候会⾃动调⽤这个⽅法。

applicationWillResignActive活跃状态:程序在屏幕上可见⾮活跃状态:程序没有显⽰在屏幕上(按home键进⼊后台、来电打断、在当前应⽤程序打开其他的应⽤程序3.应⽤程序已经进⼊后台的时候会⾃动调⽤( 进⼊后台:按home键)applicationDidEnterBackground按下home键:command + shift + h在这个⽅法中⼀般去暂停视频/⾳频播放;游戏需要暂停游戏;保存数据4.应⽤程序将要进⼊前台的时候会⾃动调⽤( 进⼊前台)applicationWillEnterForeground按两下home键:command + shift + h + h(模拟器)5.应⽤程序已经变成活跃状态的时候会⾃动调⽤ applicationDidBecomeActivea.程序启动成功后b.程序从后台重新进⼊前台c.来电打断结束6.应⽤程序将要终⽌的时候会调⽤applicationWillTerminateUIviewUIview:是ios中所有视图(控件)直接/间接的⽗类;所以uiview的属性和⽅法,对于其他类型的视图都有效视图:在屏幕上能看见的所有东西属于视图1.创建UIView的对象let redView = UIView.init()2.设置frame属性(由坐标(x,y)和⼤⼩(width,height)两部分组成redView.frame = CGRectMake(10, 10, 100, 100)a必须设置坐标和⼤⼩(默认坐标(0.0),⼤⼩(0,0))b将视图添加到已经展⽰在屏幕上的视图上ios中所以的结构都有⼀个对应的Make⽅法⽤来快速的创建⼀个结构体变量3.把视图添加到界⾯上self.view.addSubview(redView)4.设置背景颜⾊视图的背景颜⾊默认是透明CGFloat就是UI中的浮点型颜⾊创建⽅式:a通过类型⽅法创建指定颜⾊redView.backgroundColor = UIColor.greenColor()b通过三原⾊创建颜⾊(red,green,blue:红绿蓝的值(0-1) alpna:透明的值(0-1)redView.backgroundColor = UIColor.init(red: 30/255.0, green: 133/255.0, blue: 26/255.0, alpha: 1)总结:计算视图坐标的时候,注意相对性,当前视图被添加到那个视图上那么当前视图的坐标就是相对于谁来算的相关属性let readView = UIView.init()self.view.addSubview(readView)设置背景颜⾊readView.backgroundColor = UIColor.redColor()1.frame(坐标和⼤⼩)readView.frame = CGRectMake(100, 100, 100, 100)2.center(中⼼点)a通过frame和确定视图的中⼼点坐标print(readView.center)b可以通过center的值,取改变视图的坐标readView.center = CGPointMake(200, 200)3.bounds(坐标和⼤⼩)默认情况下bounds的坐标是(0.0),⼤⼩和视图的frame⼤⼩⼀样了解:rg改变bouns的⼤⼩,frame的⼤⼩和坐标都改变,center不变如果改变bounds的坐标,不影响当前视图的位置。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Swift语言学习之如何用swift写ProgressHUD//// ProgressHUD.swift// BiaoGeMusic//// Created by ljy-335 on 14-10-21.// Copyright (c) 2014年uni2uni. All rights reserved. //import Foundationimport UIKit////// @brief 样式enum HYBProgressHUDStyle {case BlackHUDStyle /// 黑色风格case WhiteHUDStyle /// 白色风格}////// @brief 定制显示通知的视图HUD /// @author huangyibiaoclass HYBProgressHUD: UIView {var hud: UIToolbar?var spinner: UIActivityIndicatorView?var imageView: UIImageView?var titleLabel: UILabel?////// private 属性///private let statusFont =UIFont.boldSystemFontOfSize(16.0) private var statusColor: UIColor!private var spinnerColor: UIColor!private var bgColor: UIColor!private var successImage: UIImage!private var errorImage: UIImage!////// @brief 单例方法,只允许内部调用private class func sharedInstance()-&gt;HYBProgressHUD {struct Instance {static var onceToken: dispatch_once_t = 0static var instance: HYBProgressHUD?}dispatch_once(&amp;Instance.onceToken, { () -&gt; Void inInstance.instance =HYBProgressHUD(frame:UIScreen.mainScreen().bounds)Instance.instance?.setStyle(HYBProgressHUDStyle.White HUDStyle)})return Instance.instance!}override init(frame: CGRect) { super.init(frame: frame)hud = nilspinner = nilimageView = niltitleLabel = nilself.alpha = 0.0}required init(coder aDecoder: NSCoder) {fatalError("init(coder:) has not been implemented")}////// 公开方法////// 显示信息class func show(status: String) {sharedInstance().configureHUD(status, image: nil, isSpin: true, isHide: false)}/// 显示成功信息class func showSuccess(status: String) {sharedInstance().configureHUD(status, image: sharedInstance().successImage, isSpin: false, isHide: true)}/// 显示出错信息class func showError(status: String) {sharedInstance().configureHUD(status, image: sharedInstance().errorImage, isSpin: false, isHide: true)}/// 隐藏class func dismiss() {sharedInstance().hideHUD()}////// 私有方法///////// @brief 创建并配置HUDprivate func configureHUD(status: String?, image: UIImage?, isSpin: Bool, isHide: Bool) {configureProgressHUD()/// 标题if status == nil {titleLabel!.hidden = true} else {titleLabel!.text = status!titleLabel!.hidden = false}// 图片if image == nil {imageView?.hidden = true } else {imageView?.hidden = falseimageView?.image = image }// spinif isSpin {spinner?.startAnimating() } else {spinner?.stopAnimating() }rotate(nil)addjustSize()showHUD()if isHide {NSThread.detachNewThreadSelector("hideWhenTimeout", toTarget: self, withObject: nil)}}////// @brief 设置风格样式,默认使用的是黑色的风格,如果需要改成白色的风格,请在内部修改样式private func setStyle(style: HYBProgressHUDStyle) {switch style {case .BlackHUDStyle:statusColor = UIColor.whiteColor()spinnerColor = UIColor.whiteColor()bgColor = UIColor(white: 0, alpha: 0.8)successImage = UIImage(named: "ProgressHUD.bundle/success-white.png")errorImage = UIImage(named: "ProgressHUD.bundle/error-white.png")breakcase .WhiteHUDStyle:statusColor = UIColor.whiteColor()spinnerColor = UIColor.whiteColor()bgColor = UIColor(red: 192.0 / 255.0, green: 37.0 / 255.0, blue: 62.0 / 255.0, alpha: 1.0)successImage = UIImage(named: "ProgressHUD.bundle/success-white.png")errorImage = UIImage(named: "ProgressHUD.bundle/error-white.png")breakdefault:break}}/// @brief 获取窗口windowprivate func getWindow() -&gt;UIWindow {if let delegate: UIApplicationDelegate = UIApplication.sharedApplication().delegate {if let window = delegate.window {return window!}}returnUIApplication.sharedApplication().keyWindow////// @brief 创建HUDprivate func configureProgressHUD() {if hud == nil {hud = UIToolbar(frame: CGRectZero)hud?.barTintColor = bgColorhud?.translucent = truehud?.layer.cornerRadius = 10hud?.layer.masksToBounds = true/// 监听设置方向变化NSNotificationCenter.defaultCenter().addObserver(self,selector: "rotate:",name: UIDeviceOrientationDidChangeNotification,object: nil)}if hud!.superview == nil {getWindow().addSubview(hud!)if spinner == nil {spinner = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge)spinner!.color = spinnerColorspinner!.hidesWhenStopped = true}if spinner!.superview == nil {hud!.addSubview(spinner!)if imageView == nil {imageView = UIImageView(frame: CGRectMake(0, 0, 28, 28))}if imageView!.superview == nil {hud!.addSubview(imageView!)}if titleLabel == nil {titleLabel = UILabel(frame: CGRectZero)titleLabel?.backgroundColor = UIColor.clearColor()titleLabel?.font = statusFonttitleLabel?.textColor = statusColortitleLabel?.baselineAdjustment = UIBaselineAdjustment.AlignCenterstitleLabel?.numberOfLines = 0titleLabel?.textAlignment = NSTextAlignment.CentertitleLabel?.adjustsFontSizeToFitWidth = false}if titleLabel!.superview == nil {hud!.addSubview(titleLabel!)}}////// @brief 释放资源private func destroyProgressHUD() {NSNotificationCenter.defaultCenter().removeObserver(self, name: UIDeviceOrientationDidChangeNotification, object:nil)titleLabel?.removeFromSuperview()titleLabel = nilspinner?.removeFromSuperview()spinner = nilimageView?.removeFromSuperview()imageView = nilhud?.removeFromSuperview()hud = nil}////// @brief 设置方向变化通知处理func rotate(sender: NSNotification?) {var rotation: CGFloat = 0.0switchUIApplication.sharedApplication().statusBarOrientation { case UIInterfaceOrientation.Portrait:rotation = 0.0breakcase .PortraitUpsideDown:rotation = CGFloat(M_PI)breakcase .LandscapeLeft:rotation = -CGFloat(M_PI_2)breakcase .LandscapeRight:rotation = CGFloat(M_PI_2)breakdefault:break}hud?.transform = CGAffineTransformMakeRotation(rotation)}////// @brief 调整大小private func addjustSize() {var rect = CGRectZerovar width: CGFloat = 100.0var height: CGFloat = 100.0/// 计算文本大小if titleLabel!.text != nil {var style = NSMutableParagraphStyle()style.lineBreakMode = NSLineBreakMode.ByCharWrappingvar attributes = [NSFontAttributeName: statusFont, NSParagraphStyleAttributeName: style.copy()]var option =esLineFragmentOriginvar text: NSString = NSString(CString:titleLabel!.text!.cStringUsingEncoding(NSUTF8StringEnco ding)!,encoding: NSUTF8StringEncoding)rect =text.boundingRectWithSize(CGSizeMake(160, 260), options: option, attributes: attributes, context: nil)rect.origin.x = 12rect.origin.y = 66width = rect.size.width + 24height = rect.size.height + 80if width &lt; 100 {width = 100rect.origin.x = 0rect.size.width = 100}}hud!.center = CGPointMake(kScreenWidth / 2, kScreenHeight / 2)hud!.bounds = CGRectMake(0, 0, width, height)var h = titleLabel!.text == nil ? height / 2 : 36imageView!.center = CGPointMake(width / 2, h) spinner!.center = CGPointMake(width / 2, h)titleLabel!.frame = rect}////// @brief 显示private func showHUD() {if self.alpha == 0.0 {self.alpha = 1.0hud!.alpha = 0.0self.hud!.transform = CGAffineTransformScale(self.hud!.transform, 1.4, 1.4)UIView.animateKeyframesWithDuration(0.15,delay: 0.0,options: UIViewKeyframeAnimationOptions.AllowUserInteraction,animations: { () -&gt; Void inself.hud!.transform = CGAffineTransformScale(self.hud!.transform, 1.0 / 1.4, 1.0 / 1.4)self.hud!.alpha = 1.0}, completion: { (isFinished) -&gt; Void in })}}////// @brief 隐藏private func hideHUD() {if self.alpha == 1.0 {UIView.animateKeyframesWithDuration(0.2,delay: 0.0,options: UIViewKeyframeAnimationOptions.AllowUserInteraction,animations: { () -&gt; Void inself.hud!.transform = CGAffineTransformScale(self.hud!.transform, 0.35, 0.35)self.hud!.alpha = 0.0}, completion: { (isFinished) -&gt; Void inself.destroyProgressHUD()self.alpha = 0.0})}}////// @brief 在指定时间内隐藏func hideWhenTimeout() {autoreleasepool { () -&gt; () invar length =countElements(self.titleLabel!.text!)var sleepTime: NSTimeInterval = NSTimeInterval(length) * 0.04 + 0.5NSThread.sleepForTimeInterval(sleepTime)self.hideHUD()}}}。

相关文档
最新文档