虚拟机可以做ios开发
2015-02-04 15:06:16 yang_huan1986 阅读数 309

http://www.itnose.net/detail/6141339.html

http://www.itnose.net/detail/6037864.html

2015-08-31 20:27:13 github_29614995 阅读数 3363

做日历开发中经常要用到的一个类是NSCalendar,作者通常要用到他来获取年月日甚至是某个月有多少天这种需求,今天作者为大家讲解一个最简单的日历表,初学者都能看懂的,那么,我们开始吧

在做日历之前我们要分清楚以下的几个需求:
1.分析这个月的第一天是第一周的星期几
2.分析这个月有多少天

那么好了,我们一开始当然需要知道这个月的第一天是星期几才能说得上是一个月历嘛,所以我们要把星期日到星期一的 label 都创建出来

 // weekday
 NSArray *array = @[@"周日",@"周一",@"周二",@"周三",@"周四",@"周五",@"周六"];
UIView *weekBg = [[UIView alloc]init];
weekBg.frame = CGRectMake(0, CGRectGetMaxY(headlabel.frame), self.frame.size.width, itemH);
[self addSubview:weekBg];

这就是我们首先要显示这一周的周期表了,哈哈


好了,当然,我们也需要到创建这周一到周日 个按钮,这些按钮用来显示周一~ 周日的label 了

    for (int i = 0; i < array.count; i ++) {
        UILabel *label = [[UILabel alloc]init];
        label.text = array[i];
        label.font = [UIFont systemFontOfSize:14];
        label.textColor = [UIColor redColor];
        label.frame = CGRectMake(itemW * i, 0, itemW, itemH);
        label.textAlignment = NSTextAlignmentCenter;
        [weekBg addSubview:label];
    }

那么,日期的7个 label 算是创建好了,但是他们还没有显示任何东西,那么我们当然需要知道,这个月的第一天是星期几,才能确定数字1的位置是在那个 lable 上面了,那么如何获取呢,我们就需要到NSCalendar这个类了

给我一个日期,这个方法能算出这个月的第一天,是星期几了

- (NSInteger)firstWeekdayInThisMotnth:(NSDate *)date{
    NSCalendar *calendar = [NSCalendar currentCalendar]; // 取得当前用户的逻辑日历(logical calendar)

    [calendar setFirstWeekday:1]; //  设定每周的第一天从星期几开始,比如:. 如需设定从星期日开始,则value传入1 ,如需设定从星期一开始,则value传入2 ,以此类推
    NSDateComponents *comp = [calendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:date];
    [comp setDay:1]; // 设置为这个月的第一天
    NSDate *firstDayOfMonthDate = [calendar dateFromComponents:comp];
    NSUInteger firstWeekday = [calendar ordinalityOfUnit:NSCalendarUnitWeekday inUnit:NSCalendarUnitWeekOfMonth forDate:firstDayOfMonthDate]; // 这个月第一天在当前日历的顺序
    // 返回某个特定时间(date)其对应的小的时间单元(smaller)在大的时间单元(larger)中的顺序
    return firstWeekday - 1;
}

好了,我们终于知道这个月的第一天,也就是数字1应该显示在什么地方了,但是,我们也需要知道这个月究竟有多少天,因为每个月的天数都是不同的嘛

给我一个日期,我就能显示出这个月的长度了

- (NSInteger)totaldaysInMonth:(NSDate *)date{
    NSRange daysInOfMonth = [[NSCalendar currentCalendar] rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:date]; // 返回某个特定时间(date)其对应的小的时间单元(smaller)在大的时间单元(larger)中的范围

    return daysInOfMonth.length;
}

接下来当然运用这两个方法了

// 1.分析这个月的第一天是第一周的星期几
NSInteger firstWeekday = [self firstWeekdayInThisMotnth:date];

// 2.分析这个月有多少天
NSInteger dayInThisMonth = [self totaldaysInMonth:date];

好了,有了1号的位置,和这个月的长度,前提条件都有了,接下来就是创建可爱的日历了

 for (int i = 0; i < 42; i ++) {
        UIButton *button = [[UIButton alloc] init];
        button.titleLabel.font = [UIFont systemFontOfSize:14];

        [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
        [self addSubview:button];

        int x = (i % 7) * itemW ;
        int y = (i / 7) * itemH + CGRectGetMaxY(weekBg.frame);

        button.frame = CGRectMake(x, y, itemW, itemH);

        NSInteger day = 0;

        if (i < firstWeekday) {
            //            day = dayInLastMonth - firstWeekday + i + 1;
            continue;
        }else if (i > firstWeekday + dayInThisMonth - 1){
            //            day = i + 1 - firstWeekday - dayInThisMonth;
            continue;
        }else{
            day = i - firstWeekday + 1;
        }

        [button setTitle:[NSString stringWithFormat:@"%d",(int)day] forState:UIControlStateNormal];

好了,最简单的日历算是完成了

以下附上我做日历时候经常用到的方法和注意点

- (NSInteger)firstWeekdayInThisMotnth:(NSDate *)date{
    NSCalendar *calendar = [NSCalendar currentCalendar]; // 取得当前用户的逻辑日历(logical calendar)

    [calendar setFirstWeekday:1]; //  设定每周的第一天从星期几开始,比如:. 如需设定从星期日开始,则value传入1 ,如需设定从星期一开始,则value传入2 ,以此类推
    NSDateComponents *comp = [calendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:date];
    [comp setDay:1]; // 设置为这个月的第一天
    NSDate *firstDayOfMonthDate = [calendar dateFromComponents:comp];
    NSUInteger firstWeekday = [calendar ordinalityOfUnit:NSCalendarUnitWeekday inUnit:NSCalendarUnitWeekOfMonth forDate:firstDayOfMonthDate]; // 这个月第一天在当前日历的顺序
    // 返回某个特定时间(date)其对应的小的时间单元(smaller)在大的时间单元(larger)中的顺序
    return firstWeekday - 1;
}

// 获取日历月份的长度,也就是这个月有多少天
- (NSInteger)totaldaysInMonth:(NSDate *)date{
    NSRange daysInOfMonth = [[NSCalendar currentCalendar] rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:date]; // 返回某个特定时间(date)其对应的小的时间单元(smaller)在大的时间单元(larger)中的范围

    return daysInOfMonth.length;
}

// 日历的上一个月
- (NSDate *)lastMonth:(NSDate *)date{
    NSDateComponents *comp = [[NSDateComponents alloc]init];
    comp.month = -1;
    NSDate *newDate = [[NSCalendar currentCalendar] dateByAddingComponents:comp toDate:date options:0];
    return newDate;
}

// 获取日历的年份
- (NSInteger)year:(NSDate *)date{
    NSDateComponents *components = [[NSCalendar currentCalendar] components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:date];
    return [components year];
}

// 获取日历的月份
- (NSInteger)month:(NSDate *)date{
    NSDateComponents *components = [[NSCalendar currentCalendar] components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:date];
    return [components month];
}

// 获取日历的为第几天
- (NSInteger)day:(NSDate *)date{
    NSDateComponents *components = [[NSCalendar currentCalendar] components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:date];
    return [components day];
}

在设置 NSDate 的时候用 formatter 转换 日期会发生实际日期比转换日期多了一天的现象,这个是由于时区的影响,如果出现这种情况,可以用以下方法解决

NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@ "yyyy-MM-dd"];
NSTimeZone *GTMZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
[formatter setTimeZone:GTMZone];

 NSString *dateStr = [NSString stringWithFormat:@"%d-%d-%d",(int)self.components.year,(int)self.components.month,(int)self.components.day];

NSDate *date = [formatter dateFromString:dateStr];

如何将 NSDate 转换成日期组件NSDateComponents

NSDate *date = [NSDate date];
NSDateComponents *components = [[NSCalendar currentCalendar] components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:date];
别问我为什么知道这么多,因为我吃过亏。。。。
2017-12-12 15:40:22 qq877192055 阅读数 149

1.把另外一个ios的虚拟机复制的新的机器,运行不了闪退

突然想起来ios需要虚拟机安装unlock补丁

下载unlocker208补丁

右键以管理员身份运行win-install,则问题解决

2018-09-14 18:45:27 georgehenrywilliam 阅读数 114

参考:https://blog.csdn.net/phxiang/article/details/77934406

由于是ios开发所以之前使用界面适配都是使用的链式编程,链式编程其实就是利用block实现c++或者java语言的调用方法后还能调用方法,语法相对于oc更加精简化,话不多说就简单实现下吧,希望在以后的开发中,能够更多的利用到实践中去

-(Calculator*(^)(float num))add{

    return  ^id(float num){

        return self;

    };

}

-(Calculator*(^)(float num))sub{

    return ^id(float num){

        return self;

    };

}

 

    Calculator * cal = [[Calculator alloc] init];

    cal.add(1).sub(2);

2018-04-12 23:02:00 weixin_34356555 阅读数 4

续了一年多的长发,一直以“头可断、血可流,头型不能乱”为终生奋斗目标的我,于18日上午10时被理发师无情的“削”短了,看着镜子里的自己心里有种莫名其妙的“伤感”跟了我一年多的长发在理发师的剪刀飞舞下,纷纷快速逃离了我的脑袋瓜!真蛋疼不抒情了!

打好C语言基础,对于学习iOS开发很有帮助,英语可以不好,看懂26个字母即可,当然不是说英语好就不行(较真你就输了),英语好优势肯定大大的,在看一些国外的技术牛文,必然会有很大帮助,或接手国外的外包工作,看懂英文需求也是必须的!这里重点强调学习C语言英语好坏都可以,不用纠结!

iOS开发 -- C语言基础(关键字、标识符和注释)

注:文章大部分内容出自文顶顶和李明杰两位老师的博客,在此声明

一、关键字:

C语言提供的有特殊含义的符号,共32个。

这32个关键字,分别是

auto 局部变量(自动储存)

break无条件退出程序最内层循环

case   switch语句中选择项

char单字节整型数据

const定义不可更改的常量值

continue中断本次循环,并转向下一次循环

default switch语句中的默认选择项

do  用于构成do.....while循环语句

double定义双精度浮点型数据

else构成if.....else选择程序结构

enum枚举

extern在其它程序模块中说明了全局变量

float定义单精度浮点型数据

for构成for循环语句

goto构成goto转移结构

if构成if....else选择结构

int基本整型数据

long长整型数据

registerCPU内部寄存的变量

return用于返回函数的返回值

short短整型数据

signed有符号数

sizoef计算表达式或数据类型的占用字节数

static定义静态变量

struct定义结构类型数据

switch构成switch选择结构

typedef重新定义数据类型

union联合类型数据

unsigned定义无符号数据

void定义无类型数据

volatile该变量在程序中执行中可被隐含地改变

while用于构成do...while或while循环结构

(C语言中的关键字并不都是常用的,所以只需要记住一些常用的就可以了)

在Xcode中关键字全部高亮显示,关键字全部都为小写。如return、int等。

二、标识符

定义:标识符是程序员在程序中自定义的一些符号和名称。关键字是系统自带的,标识符是自定义的。如函数的名称等,用来区分各种事务。

标识符有一定的命名规则:

只能由26个小写字母,0-9的数字以及下划线组成。

严格区分大小写。

不能以数字开头。

不可以使用关键字作为标识符。

建议遵守命名规范:

(1)尽量起有意义的名字;(这是为了方便自己或者其他程序员在阅读代码时,能够提高效率)

(2)多个单词可以使用驼峰命名方法(第二个字母的首字母大写)或者使用下划线连接。

三、注释

(1)注释用以解释代码的含义,提高程序的可读性,注释掉的内容将不会参与编译。注释是写给程序员看的,方便同事之间的交流。

(2)注释的符号

单行注释   //

多行注释   /*     */

(3)可以使用注释检查代码的作用(前后对照),可以使用注释排错(因为编译器报错有时并不准确,且一个错误往往引发多个错误)

(4)注释的嵌套

①. 单行注释可以嵌套单行注释,多行注释

②. 多行注释可以嵌套单行注释

③. 多行注释不可以嵌套多行注释

(5)注意printf(“//abc”);这里的//在双引号内是字符串的一部分而非注释。

没办法,只能把自己想到的,还有从文顶顶和李明杰两位老师那儿看到的一些总结一下,整体来说是偏基础一些的,方便初学者去学习,以后如果有时间的话,我也会总结一下唐巧老师的一些东西,大家不喜勿喷,我总结的是给我看的,可能里面会有一些坑,我会不断进行修改的,希望也能对一些初学者有用处。

没有更多推荐了,返回首页