swift 日历练习

不喜欢码字的程序员有没有,宁愿多敲两行代码,也不愿意多写两个字。


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{

ottom:0px; font-family:Menlo; color:rgb(52,fromDate: 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)

ottom:0px; font-family:Menlo; color:rgb(0,\(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 ="yyyyMM"

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(){

ottom:0px; font-family:Menlo; color:rgb(52,fromDate: date!)

dayComponents.month += 1;

var nextDate:NSDate = calendar.dateFromComponents(dayComponents)!

date = nextDate

footView?.removeFromSuperview()

createFootView()

}

title?.text = DatetoString(nextDate)

}


}

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...