NSRange表示范围:NSRange有两个属性:location(表示起始位置)和length(表示长度),两个属性都是NSUInteger类型的
//创建一个起始位置为2,长度为1的范围
NSRange range = {2,1}; //这样写可读性不好
NSRange range = {range.location = 2, range.length = 1}; //这样写麻烦
NSRange range = NSMakeRange(2,1); //通过函数赋值,推荐该写法
//从一个大的字符串中截取一个小的字符串 substringWithRange
NSString *str = @"hello world";
NSString *subStr = [str substringWithRange:range];
NSLog(@"截取之后的字符串是:%@",subStr);
//查找小的字符串在大的字符串中的范围 rangeOfString
NSRange range1 = [str rangeOfString:@"llo"];
NSLog(@"起始位置:%lu,长度:%lu",range1.location,range1.length); //如果没有找到,返回的 location 的值为NSNotFound,length 为0
//将NSRange类型的转为字符串 NSStringFromRange
NSString *str1 = NSStringFromRange(range1);
NSPoint表示点的坐标:NSPoint有两个属性:x(表示x坐标)和y(表示y坐标) ,两个属性都是CGFloat,也就是double类型的。 默认左上角为坐标原点
//创建一个x坐标为3,y坐标为9的点
//和NSRange一样,在这里我们推荐使用函数进行赋值
NSPoint point1 = NSMakePoint(3, 9);
有一个和NSPoint一样的,是CGPoint,但是CGPoint可以跨平台使用。//使用CGPoint创建点
CGPoint point2 = CGPointMake(20, 20);
CGPoint point3 = CGPointZero; //坐标原点,相当于 CGPointMake(0,0)
//将NSPoint或者CGPoint类型的转为字符串使用 NSStringFromPoint,类似于NSStringFromRange,所以不再举例
NSSize表示尺寸:NSSize有两个属性:width(表示宽)和height(表示高) ,两个属性都是CGFloat,也就是double类型的。
与上面类似,有一个和NSSize一样的,是CGSize,但是CGSize可以跨平台使用。
NSSize size1 = NSMakeSize(2, 3);
CGSize size2 = CGSizeMake(2, 3);
CGSize size3 = CGSizeZero; //表示宽和高都是0,相当于CGSizeMake(0, 0)
//将NSSize或者CGSize类型的转为字符串使用 NSStringFromSize,类似于NSStringFromRange,所以不再举例
NSRect表示位置和尺寸:NSRect有两个属性:CGPoint类型的 origin (点)和CGSize类型的 size(尺寸)。
与上面类似,有一个和NSRect一样的,是CGRect,但是CGRect可以跨平台使用。
//创建的时候挨个赋值即可
NSRect rect1 = NSMakeRect(25, 15, 9, 6);
CGRect rect2 = CGRectMake(13, 24, 2, 8);
CGRect rect3 = CGRectZero;
//输出可以一个一个打印
NSLog(@"rect1:x=%.1f,y=%.1f,width=%.1f,height=%.1f",rect1.origin.x,rect1.origin.y,rect1.size.width,rect1.size.height);
//也可以使用NSStringFromRect 转为字符串打印
NSLog(@"rect2:%@,rect3:%@",NSStringFromRect(rect2),NSStringFromRect(rect3));
//以上基本都是一样的,接下来看几个方法
//比较两个数是否相同
bool equal1 = CGPointEqualToPoint(point1, point2);
//比较两个尺寸
bool equal2 = CGSizeEqualToSize(size1, size2);
//比较位置和尺寸
bool equal3 = CGRectEqualToRect(rect1, rect3);
//判断某个控件的范围中是否包含某个点
//x:100->200 y:0->100
CGRect rect11 = CGRectMake(100, 0, 100, 100);
CGPoint point11 = CGPointMake(150, 50);
if (CGRectContainsPoint(rect11, point11)) {
NSLog(@"点在范围中");
}else{
NSLog(@"点不在范围中");
}
//判断小控件是否在大控件里
if (CGRectContainsRect(rect11, rect1)) {
NSLog(@"rect1控件在rect11控件里");
}else{
NSLog(@"rect1控件不在rect11控件里面");
}
其实,总的来说,这几个系统自带的结构体创建对象以及一些其他的方法都是很类似的,只要掌握了规律就不会很难。