不喜欢码字的程序员有没有,宁愿多敲两行代码,也不愿意多写两个字。
import Foundation
import UIKit
@objc(DateObject)
class DateObject: NSObject{
var day : Int?
var month : Int?
var year : Int?
var btn :UIbutton?
}
import Foundation
extension NSDate{
/**
当前日期所在星期几
returns:星期几
*/
func dayOfWeek() ->NSInteger{
var calendar:NSCalendar =NSCalendar.currentCalendar()
var weekdayComponents:NSDateComponents = calendar.components(NSCalendarUnit.CalendarUnitWeekday,fromDate:self)
var week:NSInteger = weekdayComponents.weekday
week -= 2
if(week < 0){
week += 7;
}
return week
}
/**
当前日期所在月份有多少天
returns:月份天数
*/
func numberOfDaysInMonth()->NSInteger{
var calendar:NSCalendar =NSCalendar.currentCalendar()
var range:NSRange = calendar.rangeOfUnit(NSCalendarUnit.CalendarUnitDay,inUnit:NSCalendarUnit.CalendarUnitMonth,forDate: self)
var num:NSInteger = range.length
return num;
}
/**
当前日期所在月份第一天
returns:月份第一天
*/
func monthFirstDay() ->NSDate{
var calendar:NSCalendar =NSCalendar.currentCalendar()
var dayComponents:NSDateComponents = calendar.components((NSCalendarUnit.CalendarUnitYear |NSCalendarUnit.CalendarUnitMonth),fromDate: self)
dayComponents.day = 2;
var firstDate:NSDate = calendar.dateFromComponents(dayComponents)!
return firstDate;
}
/**
当前日期所在月份最后一天
returns:月份最后一天
*/
func monthLastDay() ->NSDate{
self)
dayComponents.day =self.numberOfDaysInMonth()+1;
var lastDate:NSDate = calendar.dateFromComponents(dayComponents)!
return lastDate;
}
}
//
// MyCalendar.swift
// CoolTalk
// Created by JoesRain on 15/9/16.
// copyright (c) 2015年 BreazeMago. All rights reserved.
//
import UIKit
import Foundation
@objc(CalendarJoes)
class CalendarJoes:UIVIEw {
var num:NSInteger!
var date:NSDate!
var firstDate:NSDate!
var lastDate:NSDate!
var headVIEw:UIVIEw!
var footVIEw:UIVIEw!
var Title:UILabel!
var dayArray:NSMutableArray!
var lastBtn:UIbutton!
var delegate:TestDelegate!
var Today:DateObject!
overrIDe init(frame: CGRect) {
super.init(frame: frame)
self.backgroundcolor =UIcolor.whitecolor();
date = NSDate()
num = date!.numberOfDaysInMonth()
firstDate =date!.monthFirstDay()
lastDate =date!.monthLastDay()
dayArray =NSMutableArray()
Today = DateObject()
var calendar:NSCalendar =NSCalendar.currentCalendar()
var dayComponents:NSDateComponents = calendar.components((NSCalendarUnit.CalendarUnitYear |NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitDay),fromDate: date!)
Today?.year = dayComponents.year
Today?.month = dayComponents.month
Today?.day = dayComponents.day
initUI()
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func initUI(){
createheadVIEw()
createFootVIEw()
}
/**
创建日历具体日期
*/
func createFootVIEw(){
dayArray?.removeAllObjects()
var scw = self.bounds.wIDth
footVIEw = UIVIEw(frame: CGRectMake(0,85,scw,200))
//footVIEw?.backgroundcolor = UIcolor.lightGraycolor()
var thisDay = NSDate()
var week:NSInteger =firstDate!.dayOfWeek()
var tmp:NSInteger = week
var col:NSInteger = 0
var max:float = (float)(week+num!)/7
max += 0.4;
max = roundf(max)
//println("week+num = \(week+num!),max = \(max)")
var height:float = 200.00/max
height = roundf(height)
var wIDth:float = (float)(scw-40)/7
wIDth = roundf(wIDth)
var j:NSInteger = 0
vartest1:Bool =NSUserDefaults.standardUserDefaults().boolForKey("test1")as Bool!
test2:Bool =NSUserDefaults.standardUserDefaults().boolForKey("test2")as Bool!
if(NSUserDefaults.standardUserDefaults().dictionaryForKey("test3") != nil){
vartest3: Dictionary =NSUserDefaults.standardUserDefaults().dictionaryForKey("test3")as Dictionary!
//varvalue:Nsstring = dict.objectForKey("three") as Nsstring
var test4:NSInteger =test3["test3"]!.integerValue
}
for j; j<num ;j++ {
var obj:DateObject = DateObject()
var calendar:NSCalendar =NSCalendar.currentCalendar()
var dayComponents:NSDateComponents = calendar.components((NSCalendarUnit.CalendarUnitYear |NSCalendarUnit.CalendarUnitMonth),fromDate: date!)
obj.year = dayComponents.year
obj.month = dayComponents.month
obj.day = j+1
if(j != 0){
tmp += 1
}
week = tmp%7
col = tmp/7
var off_x = float(week)*wIDth + 20
var off_y = float(col)*height
var btn:UIbutton = UIbutton(frame:CGRectMake(CGfloat(off_x),CGfloat(off_y),CGfloat(wIDth),CGfloat(height)))
var Title:UILabel = UILabel(frame: CGRectMake(0, CGfloat((height-15)/2),15))
Title.text ="\(j+1)"
Title.Font =UIFont.systemFontOfSize(18);
Title.textAlignment =NSTextAlignment.Center
btn.addTarget(self,action:"dayClick:",forControlEvents: UIControlEvents.touchUpInsIDe)
footVIEw?.addSubvIEw(btn)
btn.enabled =false;
Title.textcolor =UIcolor(red: CGfloat(0.62),green:CGfloat(0.62),blue: CGfloat(0.62),Alpha: CGfloat(1))
if(date?.laterDate(thisDay) ==date){
btn.enabled =true;
Title.textcolor =UIcolor.blackcolor()
}else{
if(obj.year! == Today.year!)
{
if(obj.month! ==Today.month!){
if((Int(obj.day!)-Int(Today.day!)) >= 3){
btn.enabled =true;
Title.textcolor =UIcolor.blackcolor()
}
}
}
}
if(!isstartTime){
}
btn.addSubvIEw(Title)
obj.btn = btn
btn.tag = j
dayArray?.addobject(obj)
//println("obj is \(obj.year) \(obj.month) \(obj.day)")
}
self.addSubvIEw(footVIEw!)
var swipleft:UISwipeGestureRecognizer =UISwipeGestureRecognizer(target:self,action:"nextMonth")
var swipRight:UISwipeGestureRecognizer =UISwipeGestureRecognizer(target:self,action:"preMonth")
swipleft.direction =UISwipeGestureRecognizerDirection.left
swipRight.direction =UISwipeGestureRecognizerDirection.Right
footVIEw?.addGestureRecognizer(swipleft)
footVIEw?.addGestureRecognizer(swipRight)
}
/**
选中日期
*/
func dayClick(sender: UIbutton){
if((sender.imageForState(UIControlState.normal) ) !=nil){
sender.setimage(nil,forState:UIControlState.normal)
}else{
if(lastBtn != nil){
lastBtn!.setimage(nil,forState:UIControlState.normal)
}
sender.setimage(UIImage(named:"btn_calendar"),forState: UIControlState.normal)
lastBtn = sender
}
var obj:DateObject? = dayArray!.objectAtIndex(Int(sender.tag))as? DateObject
//println("this is day click,\(day!.year)\(day!.month) \(day!.day)")
var str:String = self.getDateString(obj!)
self.delegate?.selectStartDay(str)
}
func getDateString(obj:DateObject) -> String{
var str = String(format:"%ld/%02ld/%02ld",obj.year!,obj.month!,obj.day!)//"\(year)\(month)\(day)"
return str;
}
/**
添加年月跟星期显示
*/
func createheadVIEw(){
var scw = self.bounds.wIDth
headVIEw = UIVIEw(frame: CGRectMake(0,70))
headVIEw?.backgroundcolor =UIcolor.whitecolor()
self.addSubvIEw(headVIEw!)
//var leftBtn:UIbutton = UIbutton(frame: CGRectMake(25,15,8,13))
var leftBtn:UIbutton = UIbutton(frame: CGRectMake(20,28,28))
//leftBtn.backgroundcolor = UIcolor.graycolor()
leftBtn.tag = 100;
var leftimg:UIImage = UIImage(named:"List_arrowback.png")!
//leftBtn.setBackgroundImage(leftimg,forState: UIControlState.normal)
leftBtn.setimage(leftimg,forState:UIControlState.normal)
leftBtn.imageEdgeInsets =UIEdgeInsetsMake(5,5,10,15)
leftBtn.addTarget(self,action:Selector("buttonAction:"),forControlEvents: UIControlEvents.touchUpInsIDe)
headVIEw?.addSubvIEw(leftBtn)
Title = UILabel(frame: CGRectMake((scw-100)/2,100,20))
Title!.text =DatetoString(date!)
Title!.textAlignment =NSTextAlignment.Center
headVIEw?.addSubvIEw(Title!)
var rightBtn:UIbutton = UIbutton(frame: CGRectMake(scw-25-18,28))
rightBtn.tag = 101;
//rightBtn.backgroundcolor = UIcolor.graycolor()
var rightimg:UIImage = UIImage(named:"List_arrowhead.png")!
//rightBtn.setBackgroundImage(rightimg,forState: UIControlState.normal)
rightBtn.setimage(rightimg,forState:UIControlState.normal)
rightBtn.imageEdgeInsets =UIEdgeInsetsMake(10,5)
rightBtn.addTarget(self,forControlEvents: UIControlEvents.touchUpInsIDe)
headVIEw?.addSubvIEw(rightBtn)
var i:CGfloat = 0
for i ; i<7 ;i++ {
var w:CGfloat = ((CGfloat)(scw-40)/7)
var off_x = i*w + 20
var lal:UILabel = UILabel(frame: CGRectMake(off_x,60,w,10))
lal.textAlignment =NSTextAlignment.Center
switch i {
case 0:
lal.text ="日"
case 1:
lal.text ="一"
case 2:
lal.text ="二"
case 3:
lal.text ="三"
case 4:
lal.text ="四"
case 5:
lal.text ="五"
case 6:
lal.text ="六"
default:
""
}
headVIEw?.addSubvIEw(lal)
}
}
/**
显示上一个月跟下一个月
*/
func buttonAction(sender: UIbutton)
{
//println("btn click tag is \(sender.tag)")
if(sender.tag == 100){
preMonth()
}else{
nextMonth()
}
}
/**
日期转为字符串
:param: date 日期
:returns: 日期字符串
*/
func DatetoString(date:NSDate)->String
{
var outputFormatter:NSDateFormatter = NSDateFormatter()
var timezone:NSTimeZone = NSTimeZone(name: "Asia/Shanghai")!
outputFormatter.timeZone = timezone
outputFormatter.dateFormat ="yyyy年MM月"
var str:String = outputFormatter.stringFromDate(date)
return str;
}
/**
当前日期前一个月
returns:前一个月
*/
func preMonth(){
var calendar:NSCalendar =NSCalendar.currentCalendar()
var dayComponents:NSDateComponents = calendar.components((NSCalendarUnit.CalendarUnitYear |NSCalendarUnit.CalendarUnitMonth),fromDate: date!)
dayComponents.month -= 1;
var preDate:NSDate = calendar.dateFromComponents(dayComponents)!
date = preDate
num = date!.numberOfDaysInMonth()
lastDate =date!.monthLastDay()
if((footVIEw) != nil){
footVIEw?.removeFromSupervIEw()
createFootVIEw()
}
Title?.text = DatetoString(preDate)
}
/**
当前日期下一个月
returns:下一个月
*/
func nextMonth(){
date!)
dayComponents.month += 1;
var nextDate:NSDate = calendar.dateFromComponents(dayComponents)!
date = nextDate
footVIEw?.removeFromSupervIEw()
createFootVIEw()
}
Title?.text = DatetoString(nextDate)
}
}
总结以上是内存溢出为你收集整理的swift 日历练习全部内容,希望文章能够帮你解决swift 日历练习所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)