作为一个初学者,总结一下一个月来学习IOS的成果,使用swift语言

本文分享了iOS开发中的几个实用技巧,包括如何设置圆角按钮、自定义单选框及使用NSTimer实现定时任务等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作为一只萌新,学习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定时器的定时不是绝对的,它受到外界的影响,有可能某个函数造成了阻塞,它就有可能跳过那一次的执行目标函数,比如我之前在实现的一个冒气泡的动画效果的时候,用到了定时器来实现气泡的动画,由于有不同种类的气泡,我创建一个子线程也产生气泡的时候,气泡的上升速度明显下降了(目测是速度对半开了,这样解释也比较合理),暂时不知道有什么解决办法,希望有大神可以帮我。。。


时间关系,先整理这些吧。。。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值