Swift:UIKit中Demo(一)
关于Swift的基本概念及语法知识。我在前面的章节中已经介绍了非常多。这一节和下一节主要有针对性的解说Swift在实际UIKit开发中的使用场景及注意点。先来看看Demo的终于效果图。
Demo分析:
1. 界面上面有三个button,他们的宽度不一致。
2. 点击每一个button的时候。以下有红色下划线跟着"走动"。
一、 Storyboard中的设计
注意到,这个红色下划线是任意摆放的。没有刻意的设置它的位置及宽度。而这个红色下划线也就是一个简单的UIView。
二、 拖线工作
在本例中,有三个IBOutlet连线工作,代码例如以下:
@IBOutlet weak var firstButton: UIButton!
@IBOutlet weak var underline: UIView!
@IBAction func btnClick(sender: UIButton)
1. 之所以连线第一个button。是由于程序刚启动的时候,应该默认运行点击第一个button的事件,以此来改变红色下划线的位置及宽度。
2. underline这个UIView便是这个红色下划线。
关于上面 "!" 使用假设有什么疑问的话。能够參照 《Swift:可选类型(Optional)》。
3. btnClick 这种方法就是三个button的共同点击事件。
三、 button点击事件分析
代码例如以下:
UIView.animateWithDuration(0.25, animations: { () -> Void in
self.selectedButton?.selected = false
sender.selected = true
self.selectedButton = sender
// 要先设置宽高,后设置位置,不然效果有影响
self.underline.frame.size.width = sender.frame.size.width
self.underline.center.x = sender.center.x
self.underline.frame.origin.y = CGRectGetMaxY(sender.frame) + 5
})
代码中的前三句是经典的button点击三部曲(用来切换button的点击状态),后面三句就是用来实现终于的动画;程序简单明了,我就不做过多的解释工作。
仅仅想说明两点:
1. selectedButton 是定义的一个属性,用来指向被选中的button。
2. self.selectedButton?.selected = false 事实上是代码的简写形式。也能够写成以下的形式,他们是等价的。
if(self.selectedButton != nil){
self.selectedButton.selected = false
}
注意: 在推断语句中,我们使用了比較推断,即self.selectedButton 是否为nil。
在objective-c中,或许大家会直接书写成 if(self.selectedButton) 进行推断就能够了。可是在Swift中这样书写是错误的。
由于Swift是类型安全的语言,推断条件必须是bool值。即使你在Swift中写成 if(1) 这种推断条件也是失败的。
四、 默认选中第一个button
这个操作事实上是非常easy的。仅仅要在viewDidLoad中加一句
self.btnClick(self.firstButton)
但会出现下划线默认会移动的效果。由于下划线默认不在第一个button的下方。所以运行动画,会移动过去。
解决的办法就是在默认载入的时候,禁止动画就可以。所以终于的代码例如以下:
class ViewController: UIViewController {
weak var selectedButton: UIButton!
@IBOutlet weak var firstButton: UIButton!
@IBOutlet weak var underline: UIView!
@IBAction func btnClick(sender: UIButton) {
UIView.animateWithDuration(0.25, animations: { () -> Void in
self.selectedButton?
.selected = false
sender.selected = true
self.selectedButton = sender
self.underline.frame.size.width = sender.frame.size.width
self.underline.center.x = sender.center.x
self.underline.frame.origin.y = CGRectGetMaxY(sender.frame) + 5
})
}
override func viewDidLoad() {
super.viewDidLoad()
// 界面刚载入进来的时候。禁止动画
UIView.setAnimationsEnabled(false)
self.btnClick(self.firstButton)
UIView.setAnimationsEnabled(true)
}
}
Swift:UIKit中Demo(一)的更多相关文章
- [Swift]在Swift项目中创建桥接头文件,Swift文件和Objective-C文件相互调用
创建一个Swift项目[demo],以下内容Swift文件和Objective-C文件相互调用都是在Swift项目中. 一.Swift文件调用Objective-C文件 新建文件夹[SupportFi ...
- [Xcode 实际操作]九、实用进阶-(6)在Swift文件中调用Object-C的类和方法
目录:[Swift]Xcode实际操作 本文将演示在Swift文件中调用Object-C的类和方法. 在项目文件夹[DemoApp]上点击鼠标右键 ->[New File]创建一个Object- ...
- 在 Swift 项目中实现侧滑菜单-利用 SWRevealViewController
你可以完全自己手动写一个侧滑菜单,但是现在在 GitHub 上面已经有很多免费的开源库了,如果不是有很特别的需求,大可不必新建一个轮子. 在这里我使用的这个第三方库名字叫做 SWRevealViewC ...
- Swift UIViewController中的delegate方式传值
ios swift开发中有几种方式传值,看到简书上一篇不错的文章. 链接:http://www.jianshu.com/p/3e1173652996 一.通过segue进行传值 二.通过delegat ...
- 在Swift项目中使用cocoaPods导入第三方OC库
首先保证你的项目是基于cocoaPods的,并且是通过XX.xcworkspace打开的.cocoaPods安装教程(Xcode6以上) 下面就第三方库MBProgressHUD来讲解如何在Swift ...
- Swift 3 中的访问控制 open public internal fileprivate private
Swift 3必看:新的访问控制fileprivate和open http://www.jianshu.com/p/604305a61e57 浅谈 Swift 3 中的访问控制 https://mai ...
- swift项目中使用OC/C的方法
假如有个OC类OCViewController : UIViewController类里有两个方法 //swift调用oc或c的混编是比较常用的,反过来的调用很少.这里只写了swift调用oc和c的方 ...
- Swift编程语言中的方法引用
由于Apple官方的<The Swift Programming Guide>对Swift编程语言中的方法引用介绍得不多,所以这里将更深入.详细地介绍Swift中的方法引用. Swift与 ...
- Swift语言中为外部参数设置默认值可变参数常量参数变量参数输入输出参数
Swift语言中为外部参数设置默认值可变参数常量参数变量参数输入输出参数 7.4.4 为外部参数设置默认值 开发者也可以对外部参数设置默认值.这时,调用的时候,也可以省略参数传递本文选自Swift1 ...
随机推荐
- js函数参数理解
eg: function setName(obj){ obj.name = "Nicholas"; obj = new Object(); obj.name = "Gre ...
- ActiveMQ学习笔记(6)----ActiveMQ整合Spring开发
1. 添加依赖 spring 提供了对JMS的支持,需要添加Spring支持jms的包和Spring的核心包,如下: <dependency> <groupId>org.apa ...
- 简洁的MVC思想框架——Nancy(Session的使用)
前文提到关于Nancy中GET和POST以及外部引用图片,css和JS的文件等操作.今天所讲的是Nancy关于Session相关操作. Session作为web开发中极其重要的一部分,而Nancy中S ...
- Hadoop-2.4.1 ubuntu集群安装配置教程
一.环境 系统: Ubuntu 14.04 32bit Hadoop版本: Hadoop 2.4.1 (stable) JDK版本: 1.7 集群数量:3台 注意事项:我们从Apache官方网站下载的 ...
- tensorflow学习笔记(一)安装
1.tensorflow介绍 中文社区地址 http://www.tensorfly.cn/ TensorFlow™ 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库. ...
- [洛谷P3939]数颜色
题目大意:有n个物品,每个物品有一个颜色.现在有两种操作:1.查询l-r内有多少颜色为c的物品并输出.2.将第x个物品和第x+1个交换.现在让你实现这些操作. 解题思路:首先一共有300000种颜色, ...
- windows下matlab代码到ubuntu下中文注释出现乱码
转自:https://blog.csdn.net/kouyi5627/article/details/81513329 环境:Ubuntu18.04,Matlab R2017b. 把matlab文件从 ...
- Linux split 命令用法详解 - 切割文件[转]
功能说明:切割文件.语 法:split [--help][--version][-<行数>][-b <字节>][-C <字节>][-l <行数>][要切 ...
- [转] 经典排序算法 - 基数排序Radix sort
原理类似桶排序,这里总是需要10个桶,多次使用 首先以个位数的值进行装桶,即个位数为1则放入1号桶,为9则放入9号桶,暂时忽视十位数 例如 待排序数组[62,14,59,88,16]简单点五个数字 分 ...
- 手机Android音视频採集与直播推送,实现单兵、移动监控类应用
最新手机採集推送直播监控以及EasyDarwin开源流媒体平台的版本号及代码: EasyDarwin 开源流媒体云平台:https://github.com/easydarwin EasyClient ...