作为一只萌新,学习iOS 已经一个月了,感觉只是一个劲得往前冲,还不如写篇博客整理一下比较好(好吧,也是我的第一次写博客):
我学的是swift语言,因为它是一门很新的语言,所以遇到的很多问题网上都百度不到,最多找到objc的版本,只是初学者最头疼的问题。。。
那么开始了:
1.设置圆角按钮:
在IOS里面设置圆角按钮还是比较简单的,可以在代码里面实现,也可以不在代码里面实现,不过这2者原理是一样的:
代码实现:
try.layer.cornerRadius = try.bounds.width/2 //try为你的按钮名称,cornerRadius是一个CGFloat类型的数,按照我这里的写法是产生一个正圆,具体多少圆由你来定
非代码实现:在User Defined Runtime Attributes里面添加,设置Key Path为layer.cornerRadius , Type 为 Number , Value由你自己设置,与代码实现的一个道理
2.自定义单选框
之前做的APP中需要有单选框的功能,然而IOS并没有提供这类控件,百度许久之后也只找到了自定义一种方法,接下来是我自己做的一个单选框控件,供参考:
import Foundation
import UIKit
class MYRadioButtons: UIButton {
var up_down = 1{
didSet{
self.setImage(UIImage(named: name[up_down]), forState: UIControlState.Normal)
}
}
var select = true//true代表选中了,false代表未选中
var textColor = UIColor.grayColor()
var name = ["radioNS","radioS"]//设置图片的名字
var label : UILabel
var text : String=""{//给text变量赋值即自动设置label的text
didSet{
label.text = text
}
}
override init(frame: CGRect) {
label = UILabel(frame: frame)
label.text = text
label.textColor = textColor
label.textAlignment = NSTextAlignment.Center
label.font = UIFont(name: "Helvetica Neue", size: 12)
label.adjustsFontSizeToFitWidth = true
super.init(frame: CGRectMake(label.frame.origin.x - label.frame.height, label.frame.origin.y, label.frame.height, label.frame.height))
self.setImage(UIImage(named: name[up_down]), forState: UIControlState.Normal)
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
上述的单选框控件自带一个label,用于显示这个单选框代表什么,它的构造函数中传入的frame参数是设置那个label的位置,单选框按钮就紧贴在它的左边。
为了方便大家,我将我用的选中与未选中的图片也上传,不过这个做起来很简单,大家也可以自己做。
这两者图片大家需要在Images.xcassets里面添加,选中状态是叫radioS,未选中状态是叫radioNS。这些大家都可以改。。。
3.NSTimer的使用
我觉得这是很好玩的一个东西,感觉可以用它来做帧动画。。。哈哈,不知道大神们怎么看。
这是个定时器的类,是这样使用的:
var timer:NSTimer
timer=NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "updateTimer:", userInfo: nil, repeats: true)
NSTimer.scheduledTimerWithTimeInterval 函数的第一个参数代表时间间隔,第二个参数代表需要调用的函数名称,如果函数名后面跟一个冒号代表将timer这个变量作为参数传递给这个函数(如:timer将作为参数传递给updateTimer函数),那么该函数需要有这个的形参(如:updateTimer(timer:NSTimer) ),如果你还想传递其他参数到updateTimer函数里面,你需要在NSTimer.scheduledTimerWithTimeInterval 第3个参数中加上他,并且在updateTimer函数里面进行强制类型转换(如:var i:int = 10
timer=NSTimer.scheduledTimerWithTimeInterval(1,
target: self, selector: "updateTimer:",
userInfo: i, repeats: true)
.
.
.
func updateTimer(timer:NSTimer){
var i = timer.userInfo as! int
}
)
第四个参数 repeats true代表重复执行updateTimer函数,false反之,执行的时间间隔就是第一个参数设置的时间间隔。
想要停止这个定时器只需要调用(也是唯一的方法):timer.invalidate()
之前在运行多线程程序时候,发现定时器没有运行起来,后来发现只要不是在主线程中的定时器都要手动把它添加到RunLoop中,不然不会启动定时器,代码如下:
NSRunLoop.currentRunLoop().addTimer(timer, forMode: NSDefaultRunLoopMode)
NSRunLoop.currentRunLoop().run()
这样在子线程中的定时器也可以运行起来了。值得注意的是,NSTimer定时器的定时不是绝对的,它受到外界的影响,有可能某个函数造成了阻塞,它就有可能跳过那一次的执行目标函数,比如我之前在实现的一个冒气泡的动画效果的时候,用到了定时器来实现气泡的动画,由于有不同种类的气泡,我创建一个子线程也产生气泡的时候,气泡的上升速度明显下降了(目测是速度对半开了,这样解释也比较合理),暂时不知道有什么解决办法,希望有大神可以帮我。。。
时间关系,先整理这些吧。。。