当前位置: 首页 > 编程日记 > 正文

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 inself.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) } }


相关文章:

jdbc封装与多并发的共鸣

欢迎来到:http://observer.blog.51cto.com代码的封装是一门艺术,封装得好,不但给自己便利,还可以给自己的维护提供帮助;同时,封装得好,还可以给看自己代码的人以赏心悦目的感觉,团队…

计算机视觉怎样实现自我超越?更大规模更精准的数据

最新发布的《2021中国人工智能应用趋势报告》强调,数据、算力和算法是支撑人工智能发展的"三驾马车",为模型训练提供基本资料的「数据」,是人工智能的根基。 随着互联网、社交媒体、移动设备和传感器的大量普及,其产生…

Visual Studio 2005 Web Deployment Projects版本不同引发的问题

为了方便Visual Studio 2005发布为单一dll,微软发布了一个Visual Studio 2005 插件,Visual Studio 2005 Web Deployment Projects,在微软的不同文档里,这个插件提供了两个下载地址,分别是: 下载地址一&…

【书籍下载链接】_2_第二轮_计算机专业书籍

各位朋友,下面是我收集的书籍,介绍给大家,有需要可以分享给大家,如果看的还可以,请购买纸质版的图书。 驱动器 J 中的卷是 Elements 卷的序列号是 8AAF-3206 j:\ 的目录 2014/01/20 20:00 1,533,385 WinCE.pdf2010/09/…

VS2005发布、生成网站时如何设置固定的dll文件名?

在用VS2005发布网站项目时,默认生成bin目录下的.dll文件名是随机命名的; 如果要固定生成文件名如何固定呢?有以下两种方案: 一、每个页面的程序集分别生成对应的dll; 方法:在“发布网站”的选项中,勾选“使用固定命名和单页程…

android 广播机制

1:首先说andoid 广播分为系统的和 自定义的 2:注册方式呢,也是两种,1:静态注册,在manifest.xml 文件中注册的 2:动态注册,用filter 区分 不说了 占代码 首先是动态注册:…

2021第一融!第四范式完成D轮7亿美元融资

来源丨第四范式头图丨来源于第四范式近日,第四范式宣布完成D轮融资,融资金额7亿美元。本轮融资由春华资本、博裕资本、厚朴投资领投,并引入国家制造业转型基金、国开、国新、中国建投、中信建投、海通证券等战略股东,红杉中国、中…

springboot-26-springboot 集成rabbitmq

rabbitmq是基于AMQP规范的一个消息代理, 它可以兼容jms, 支持其他语言, 并且可以跨平台 1, 安装 1) 普通安装 度娘: 2) docker 安装 sudo docker run -d -p 5672:5672 -p 15672:15672 rabbitmq:3-management 安装成功后: 使用 guest/guest 用户登录 2 使用: 1) 添加 rabbi…

asp.net中的联动菜单

目标达到的效果:两个下拉框,第二个跟随第一个变化而变化,使用客户端脚本JavaScript在ASP.NET环境下实现。 第一步:建立JavaScript脚本: 在Page_Load中建立并注册这个js脚本: string scriptKey "Menu…

2020长沙“科技之星”榜单重磅揭晓,近百家企业凭实力“出道”!

今天,「INFLUENCE长沙 2020年度“科技之星”企业评选」(下文统称「长沙科技之星」)圆满收官,评选结果正式揭晓!作为专业的 IT 社区,CSDN 多年来与千万技术人员、技术企业共同见证了产业的发展和时代的变更…

CENTOS6.4 IBUS输入法不显示候选词解决办法

IBUS输入法 不显示候选词原因分析:输入im-chooser时候,显示找不到gtk模块;原因为升级python后的版本,不能导入gtk。找到能够导入gtk版本的python,然后默认python设置为此版本。故障解决:删除或更改默认python版本# whi…

sql server 表索引碎片处理

DBCC SHOWCONTIG (Transact-SQL) SQL Server 2005 其他版本更新日期: 2007 年 9 月 15 日 显示指定的表或视图的数据和索引的碎片信息。 重要提示:后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工作中使用该功能,并着手修…

ASP.NET2.0 GridView小技巧汇粹

1)GridView绑定数据源控件,需要有编辑和删除选项按钮时,数据源控件必须提供SQL操作语句或存储过程调用,一般,我的推荐做法是,使用无意义的SQL语句或存储过程来使GridView的编辑和删除按钮可以生成,具体的编辑更新和删除操作在代码运行时而不是在控件设计时指定,虽然多写了一点代…

树莓派出微控制器了!Raspberry Pi Pico 只需 4 美元

整理 | 郑丽媛来源 | CSDN(ID:CSDNnews)昨天,树莓派搞了个大动作:推出了首款微控制器开发板 Raspberry Pi Pico!该开发板基于树莓派开发的全新芯片——RP2040,并且作为双核 Arm Cortex-M0 的它…

“chaos”的算法--之链表面试题

【 声明:版权所有,欢迎转载。 联系信箱:yiluohuanghungmail.com】前两天倩仔仔给我了一套试题让我看,整体来说感觉题都还算不错,从中随便找了两道。先看题吧!1、怎样判断一个单链表中是都存在环路&#xff…

ABP官方文档翻译 6.1.2 MVC视图

ASP.NET MVC 视图 介绍AbpWebViewPage基类介绍 ABP通过Abp.Web.Mvc nuget包集成到MVC视图。你可以如往常一样创建正常的MVC视图。 AbpWebViewPage基类 ABP提供了AbpWebViewPage,它定义了一些有用的属性和方法。如果你使用启动模板创建的工程,那么你所有的…

ASP.NET 打开新窗口几种方法

ASP.NET打开新窗口方法一:Response.Write("<script language/"javascript/">window.open(aaa.aspx,新窗口,/"toolbaryes,locationno,directoriesyes,statusyes,menubaryes,resizableyes,scrollbarsyes/");</script>");这种方式代码每…

Hibernate的使用梳理

Hibernate创建步骤 &#xff08;五大核心接口&#xff1a;Configuration/SessionFactory/Session/Transaction/Query&#xff09; 1.新建java工程&#xff0c;导入需要的jar包。 2.创建hibernate.cfg.xml配置文件和Test.java工具类。配置好相应的实体对象User.java User.hbm.x…

驭势科技引入国家队战略注资,完成超10亿元人民币融资

2021年1月25日&#xff0c;驭势科技&#xff08;UISEE&#xff09;宣布完成累计金额超10亿元人民币的新一轮融资&#xff0c;并获得国开制造业转型升级基金的战略注资。这是国开制造业转型升级基金在自动驾驶领域的首笔投资。2019年11月&#xff0c;国家制造业转型升级基金股份…

[Python爬虫] 之二十二:Selenium +phantomjs 利用 pyquery抓取界面网站数据

一、介绍 本例子用Selenium phantomjs爬取界面&#xff08;https://a.jiemian.com/index.php?msearch&aindex&typenews&msg电视&#xff09;的资讯信息&#xff0c;输入给定关键字抓取资讯信息。 给定关键字&#xff1a;数字&#xff1b;融合&#xff1b;电视 抓取…

android高级编程-android高级应用

android高级应用>>>第一阶段程序员基本素质养成程序员所需要具备的12条职业素质让学员初步了解和审视自己所应该具备的职业素质。并且我们会在授课中随时训练和贯彻这样的素质&#xff0c;最终把大家捏成专业的职业的程序员。迭发各个环节及工具初步介绍总概性的讲解一…

asp.net三种重定向方法的总结

(1)Server.Transfer方法: Server.Transfer("m2.aspx");//页面转向(服务器上执行). 服务器停止解析本页,保存此页转向前的数据后,再使页面转向到m2.aspx, 并将转向前数据加上m2.aspx页结果返回给浏览器. (2)Server.Execute方法: Server.Execute("m2.aspx"…

区区几行Python代码,一分钟搞定一天工作量

作者 | 陈熹、刘早起来源 | 早起Python大家好&#xff0c;我是早起。前几天有一个读者说最近要整理几千份文件&#xff0c;头都要整秃了&#xff0c;不知道能不能用Python解决&#xff0c;我们来看一下&#xff0c;你也可以思考一下。由于涉及文件私密所以具体内容已做脱敏处理…

bc计算命令的知识及企业计算案例

bc命令的用法&#xff1a;bc是unix下的计算器&#xff0c;它也可以用在命令行下面&#xff1a;例&#xff1a;给自变量i加1i2iecho $i1|bc -----效率低#因为bc支持科学计算&#xff0c;所以这种方法功能非常强大[rootXCN ~]# echo 11|bc 2 [rootXCN ~]# echo 1*1|bc 1 […

ExecutorService与Executors例子的简单剖析(转)

对于多线程有了一点了解之后&#xff0c;那么来看看java.lang.concurrent包下面的一些东西。在此之前&#xff0c;我们运行一个线程都是显式调用了 Thread的start()方法。我们用concurrent下面的类来实现一下线程的运行&#xff0c;而且这将成为以后常用的方法或者实现思路。 …

GridView隐藏列取值解决方案

【摘要】 在Asp.net 2.0中增加了一个新的数据绑定控件&#xff1a;GridView&#xff0c;其目的用来取代Asp.net1.x中的DataGrid控件&#xff0c;但有一点很不爽的是&#xff0c;如果把某列设置为visiblefalse&#xff0c;则不会进行数据绑定&#xff0c;也就是说无法直接从Grid…

百度飞桨成为北京市首个AI产业方向创新应用平台

1月20日&#xff0c;北京市经济和信息化局正式授予百度公司"北京市人工智能产业创新应用平台&#xff08;百度飞桨&#xff09;"。当前&#xff0c;北京市正在创建国家人工智能创新应用先导区&#xff0c;人工智能作为新科技革命和产业变革前沿领域&#xff0c;是北京…

FTP的20、21端口,工作模式

什么是FTP? FTP就是文件传输协议 File Transfer Protocol 的缩写. FTP端口号是多少? 21 FTP的端口号能改吗? 能 ftp的端口号20、21有何区别? 一个是数据端口&#xff0c;一个是控制端口&#xff0c;控制端口一般为21&#xff0c;而数据端口不一定是20&#xff0c;这和FTP的…

android 自定义ViewGroup和对view进行切图动画实现滑动菜单SlidingMenu[转]

http://blog.csdn.net/jj120522/article/details/8095852 示意图就不展示了&#xff0c;和上一节的一样,滑动菜单SlidingMenu效果如何大家都比较熟悉&#xff0c;在这里我简单说明一下用自定义ViewGroup来实现. 实现方法&#xff1a;我们自定义一个ViewGroup实现左右滑动&#…

物联网下的数据传输,Python 就能搞定!

作者 | 李秋键责编 | 夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;引言&#xff1a;近几年来&#xff0c;谈起发展最火热的几个关键词必然是人工智能、大数据以及物联网的万物互联、边缘计算等等了。而今天&#xff0c;我们就将利用Python实现物联网下的数据传…