IOS开发基础知识--碎片20
1:view中的clipsTobounds属性
- iew2添加view1到中,如果view2大于view1,或者view2的坐标不全在view1的范围内,view2是盖着view1的,意思就是超出的部份也会画出来,UIView有一个属性,clipsTobounds 默认情况下是NO。如果,我们想要view2把超出的那部份隐藏起来的话,就得改变它的父视图也就view1的clipsTobounds属性值。view1.clipsTobounds = YES;
- 可以很好地解决覆盖的问题
2:UIScrollView滚动视图加载单元格点击事件
- svView = [[UIScrollView alloc] initWithFrame:CGRectMake(, , mainWidth, perHeight)];
- svView.bounces = NO;
- svView.contentSize = CGSizeMake(perWidth*, perHeight);
- UITapGestureRecognizer* tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapClick:)];
- [self addGestureRecognizer:tap];
- [self addSubview:svView];
- 事件:
- - (void)tapClick:(UITapGestureRecognizer*)tap
- {
- CGPoint point = [tap locationInView:svView];
- int page = point.x / perWidth;
- HomeHostest* hot = [myData objectAtIndex:page];
- if(delegate)
- {
- [delegate adClick:[NSString stringWithFormat:@"goodsdetail,%@",[hot.goodsID stringValue]]];
- }
- }
- - (CGPoint)locationInView:(UIView *)view:函数返回一个CGPoint类型的值,表示触摸在view这个视图上的位置,这里返回的位置是针对view的坐标系的。调用时传入的view参数为空的话,返回的时触摸点在整个窗口的位置。
- (CGPoint)previousLocationInView:(UIView *)view:该方法记录了前一个坐标值,函数返回也是一个CGPoint类型的值, 表示触摸在view这个视图上的位置,这里返回的位置是针对view的坐标系的。调用时传入的view参数为空的话,返回的时触摸点在整个窗口的位置。
3:对表格中的某个节跟每一行进行单独刷新
- [self.myTableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow: inSection:]] withRowAnimation:UITableViewRowAnimationAutomatic];
4:类似微信的搜索附近的人的功能 在 服务端的实现
- 基准线预先计算法
- 每个用户在服务器端都会保留最后的经度j1 和纬度w1 的同时 保留对经度基准线的相对距离 dj1 和纬度基准线的相对距离 dw1
- 经度基准线可以是中国最东边的经度 纬度基准线可以是中国最北边的纬度
- 当前用户对经度基准线的相对距离 dj2 =230km 和纬度基准线的相对距离 dw2=350km
- 查找时sql语句可以这么写(.5公里内的用户)
- select * from user where dj1>(-1.5) and dj1<(+1.5) and dw1>(-1.5) and dw1<(+1.5)
- 相当于获得当前用户 周围正方形1.5公里区域的用户
- 此外通过将冷热数据分开存放及 分块存放 用户地理数据应该能有效的提高查询速度
- 另附:(考虑把经度和纬度分成多个表存放,比如24个经度表,每个表按纬度分别排序,查找时只在最靠近的那个表查找,由于是排序的所以并不需要遍历每个记录,比如纬度相差多少的就不用再找了。 )
5:定位一些基础内容 CLLocation
- . CLLocation
- --------------------------------------------------------
- CLLocationManager 定位管理者
- CLLocation 代表位置(经度/纬度/高度/速度/路线等)
- CLHeading 代表移动方向
- CLRegion 代表一个区域
- >CLCircularRegion 圆形区域
- >CLBeaconRegion 蓝牙信号区域
- 返回定位服务是否可用
- [CLLocationManager locationServicesEnabled];
- 返回延迟定位更新是否可用
- [CLLocationManager deferredLocationUpdatesAvailable];
- 返回重大位置改变监听是否可用
- [CLLocationManager significantLocationChangeMonitoringAvailable];
- 返回是否支持磁力计算方向
- [CLLocationManager headingAvailable];
- 返回蓝牙信号范围服务是否可用
- [CLLocationManager isRangingAvailable];
- --------------------------------------------------------
- 设置是否可以暂停定位来节省电池电量, YES不需要定位数据时自动暂停定位
- // mgr.pausesLocationUpdatesAutomatically
- --------------------------------------------------------
- 每隔多少米定位一次, 只有水平方向超过该值时才会重新定位
- // mgr.distanceFilter = 100;
- --------------------------------------------------------
- 定位精确度
- // mgr.desiredAccuracy;
- kCLDistanceFilterNone;
- kCLLocationAccuracyBestForNavigation 导航级最佳精准
- kCLLocationAccuracyBest; 最佳精准
- kCLLocationAccuracyNearestTenMeters; 10米误差
- kCLLocationAccuracyHundredMeters; 百米胡茬
- kCLLocationAccuracyKilometer; 千米误差
- kCLLocationAccuracyThreeKilometers; 3千米误差
- --------------------------------------------------------
- 定位数据的用途
- // mgr.activityType;
- CLActivityTypeOther 作为普通用途
- CLActivityTypeAutomotiveNavigation 作为车辆导航
- CLActivityTypeFitness 作为步行
- CLActivityTypeOtherNavigation 作为其它导航
- --------------------------------------------------------
- // CLLocation
- location.coordinate; 坐标, 包含经纬度
- location.altitude; 设备海拔高度 单位是米
- location.course; 设置前进方向 0表示北 90东 180南 270西
- location.horizontalAccuracy; 水平精准度
- location.verticalAccuracy; 垂直精准度
- location.timestamp; 定位信息返回的时间
- location.speed; 设备移动速度 单位是米/秒, 适用于行车速度而不太适用于步行
- /*
- 可以设置模拟器模拟速度
- bicycle ride 骑车移动
- run 跑动
- freeway drive 高速公路驾车
- */
- --------------------------------------------------------
- // CLAuthorizationStatus
- 用户从未选择过权限
- kCLAuthorizationStatusNotDetermined
- 无法使用定位服务,该状态用户无法改变
- kCLAuthorizationStatusRestricted
- 用户拒绝该应用使用定位服务,或是定位服务总开关处于关闭状态
- kCLAuthorizationStatusDenied
- 已经授权(废弃)
- kCLAuthorizationStatusAuthorized
- 用户允许该程序无论何时都可以使用地理信息
- kCLAuthorizationStatusAuthorizedAlways
- 用户同意程序在可见时使用地理位置
- kCLAuthorizationStatusAuthorizedWhenInUse
- --------------------------------------------------------
- // 计算两个位置之间的距离, 单位是米
- [newLocation distanceFromLocation:self.prevLocation];
- --------------------------------------------------------
- 获取方向信息不会提示用户(不需要授权), 因为不会泄露隐私
- // [self.mgr startUpdatingHeading];
- magneticHeading 设备与磁北的相对角度
- trueHeading 设置与真北的相对角度, 必须和定位一起使用, iOS需要设置的位置来计算真北
- 真北始终指向地理北极点
- 磁北对应随着时间变化的地球磁场北极
- // 牛逼的地方
- 116.958776,36.721199
- --------------------------------------------------------
- // 错误:使用CoreLocation获取地理位置信息,报错
- Error Domain=kCLErrorDomain Code= "The operation couldn’t be completed. (kCLErrorDomain error 0.)"
- 解决方法:
- .确定模拟器(手机)已经联网并且允许程序获取地理位置
- .重置地理位置服务或者网络服务
- PS:如果是模拟器就果断直接重置模拟器吧 IOS Simulator - Reset Content and Settings..。
- /*
- 注意: iOS7只要开始定位, 系统就会自动要求用户对你的应用程序授权. 但是从iOS8开始, 想要定位必须先"自己""主动"要求用户授权
- 在iOS8中不仅仅要主动请求授权, 而且必须再info.plist文件中配置一项属性才能弹出授权窗口
- NSLocationWhenInUseDescription,允许在前台获取GPS的描述
- NSLocationAlwaysUsageDescription,允许在后台获取GPS的描述
- */
6:CGPoint一些常见操作
- 数据结构中的一个点CGPoint代表在一个二维坐标系统。数据结构的位置和尺寸CGRect代表的一个长方形。数据结构的尺寸CGSize代表宽度和高度。
- 、创建一个几何原始数值
- CGPoint CGPointMake(CGPoint A,CGPoint B)
- 返回一个指定坐标点
- CGRect CGRectMake(CGFloat x,CGFloat y,CGFloat width,CGFloat height)
- 根据指定的坐标和大小创建一个矩形
- CGSize CGSizeMake(CGFloat width,CGFloat height)
- 根据指定长宽创建一个CGSize
- 、修改矩形
- CGRectDivide
- CGRect CGRectInset(CGRect rect,CGFloat dx,CGFloat dy)
- 返回一个比原矩形大或小的矩形,但是中心点是相同的
- CGRect CGRectIntegral(CGRect A)
- 将矩形A的值转变成整数,得到一个最小的矩形,
- CGRect CGRectIntersection:(CGRect A,CGRect B)
- 获取两个矩形相交处所的矩形,没有相交返回NULL,用CGRectIsNull来检测
- CGRectOffset
- CGRectStandardize
- CGRectUnion
- 、比较数值
- bool CGPointEqualToPoint(CGPoint A,CGPoint B)
- 返回两个点是否相等
- bool CGSizeEqualToSize(CGSize A,CGSize B)
- CGSizeAB是否相等
- bool CGRectEqualToRect(CGRect A,CGRect B)
- 矩形AB的位置大小是否相等
- bool CGRectIntersectsRect(CGRect A,CGRect B)
- 矩形AB是否相交,可用来判断精灵是否离开了屏幕
- 、检查
- bool CGRectContainsPoint(CGRect A, CGPoint B)
- 检测矩形A是否包含指定的点B
- bool CGRectContainsRect(CGRect A,CGRect B)
- 检测矩形A是否包含矩形B
- 、获取最大值、中等职和最小值
- CGFloat CGRectGetMinX(CGRect A)
- 获取矩形x坐标的最小值
- CGFloat CGRectGetMinY(CGRect A)
- 获取矩形y坐标的最小值
- CGFloat CGRectGetMidX(CGRect A)
- 获取矩形x坐标的中间值
- CGFloat CGRectGetMidY(CGRect A)
- 获取矩形y坐标的中间值
- CGFloat CGRectGetMaxX(CGRect A)
- 获取矩形x坐标的最大值
- CGFloat CGRectGetMaxY(CGRect A)
- 获取矩形y坐标的最大值
- 、获取高和宽
- CGFloat CGRectGetHeight(CGRect A)
- 获取矩形A的高
- CGFloat CGRectGetWidth(CGRect A)
- 获取矩形A的宽
- 、检测矩形是否存在或是无穷大
- bool CGRectIsEmpty(CGRect A)
- 矩形A是否长和宽都是0,或者是个NULL
- bool CGRectIsNull(CGRect A)
- 矩形A是否为NULL
- bool CGRectIsInfinite(CGRect A)
- 矩形A是否无穷大,没有边界
7:iOS7 中 boundingRectWithSize:options:attributes:context:计算文本尺寸的使用
- 之前使用了NSString类的sizeWithFont:constrainedToSize:lineBreakMode:方法,但是该方法已经被iOS7 Deprecated了,而iOS7新出了一个boudingRectWithSize:options:attributes:context方法来代替。
- 而具体怎么使用呢,尤其那个attribute
- NSDictionary *attribute = @{NSFontAttributeName: [UIFont systemFontOfSize:]};
- CGSize size = [@“相关NSString” boundingRectWithSize:CGSizeMake(, ) options: NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:attribute context:nil].size;
- 属性
- a:NSStringDrawingTruncatesLastVisibleLine:
- 如果文本内容超出指定的矩形限制,文本将被截去并在最后一个字符后加上省略号。如果没有指定NSStringDrawingUsesLineFragmentOrigin选项,则该选项被忽略。
- b:NSStringDrawingUsesLineFragmentOrigin:
- 绘制文本时使用 line fragement origin 而不是 baseline origin。
- c:NSStringDrawingUsesFontLeading:
- 计算行高时使用行距。(译者注:字体大小+行间距=行距)
- d:NSStringDrawingUsesDeviceMetrics:
- 计算布局时使用图元字形(而不是印刷字体)。
- 实例二:
- NSString *str = @"正在搜索附近的位置";
- UIFont *font = [UIFont systemFontOfSize:14.0];
- CGSize size = CGSizeMake(CGFLOAT_MAX, );
- CGRect rect = [str boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont fontWithName:font.fontName size:font.pointSize]} context:nil];
- CGRect buttonFrame = CGRectZero;
- buttonFrame.size.height = CGRectGetHeight(rect);
- buttonFrame.size.width = CGRectGetWidth(rect);
- UILabel *label = [[UILabel alloc]initWithFrame:buttonFrame];
8:一段布局排版关于tableView.tableFooterView设置按键跟等待提示
- - (UIView *)searchDisplayLoadingFooterView
- {
- if (!_searchDisplayLoadingFooterView) {
- _searchDisplayLoadingFooterView = [[UIView alloc]initWithFrame:CGRectMake(, , CGRectGetWidth(self.tableView.bounds), )];
- _searchDisplayLoadingFooterView.backgroundColor = [UIColor clearColor];
- NSString *str = @"正在搜索附近的位置";
- UIFont *font = [UIFont systemFontOfSize:14.0];
- CGSize size = CGSizeMake(CGFLOAT_MAX, );
- CGRect rect = [str boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont fontWithName:font.fontName size:font.pointSize]} context:nil];
- CGRect buttonFrame = CGRectZero;
- buttonFrame.size.height = CGRectGetHeight(rect);
- buttonFrame.size.width = CGRectGetWidth(rect);
- UILabel *label = [[UILabel alloc]initWithFrame:buttonFrame];
- label.backgroundColor = [UIColor clearColor];
- label.text = str;
- label.font = font;
- label.textColor = [UIColor colorWithHexString:@"0x222222"];
- label.numberOfLines = ;
- label.textAlignment = NSTextAlignmentCenter;
- label.center = _searchDisplayLoadingFooterView.center;
- [_searchDisplayLoadingFooterView addSubview:label];
- CGPoint indicatorCenter = CGPointZero;
- indicatorCenter.x = CGRectGetMinX(label.frame) - ;
- indicatorCenter.y = label.center.y;
- UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
- indicator.center = indicatorCenter;
- indicator.hidesWhenStopped = YES;
- [_searchDisplayLoadingFooterView addSubview:indicator];
- [indicator startAnimating];
- CGRect lineFrame = _searchDisplayLoadingFooterView.bounds;
- lineFrame.size.height = 0.5;
- UIView *topLine = [[UIView alloc]initWithFrame:lineFrame];
- topLine.backgroundColor = [UIColor colorWithHexString:@"0xdddddd"];
- lineFrame.origin.y = CGRectGetMaxY(_searchDisplayLoadingFooterView.bounds) - 0.5;
- UIView *bottomLine = [[UIView alloc]initWithFrame:lineFrame];
- bottomLine.backgroundColor = [UIColor colorWithHexString:@"0xdddddd"];
- [_searchDisplayLoadingFooterView addSubview:topLine];
- [_searchDisplayLoadingFooterView addSubview:bottomLine];
- }
- return _searchDisplayLoadingFooterView;
- }
9:百度坐标跟火星坐标相互转换
- //百度转火星坐标
- + (CLLocationCoordinate2D )bdToGGEncrypt:(CLLocationCoordinate2D)coord
- {
- double x = coord.longitude - 0.0065, y = coord.latitude - 0.006;
- double z = sqrt(x * x + y * y) - 0.00002 * sin(y * M_PI);
- double theta = atan2(y, x) - 0.000003 * cos(x * M_PI);
- CLLocationCoordinate2D transformLocation ;
- transformLocation.longitude = z * cos(theta);
- transformLocation.latitude = z * sin(theta);
- return transformLocation;
- }
- //火星坐标转百度坐标
- + (CLLocationCoordinate2D )ggToBDEncrypt:(CLLocationCoordinate2D)coord
- {
- double x = coord.longitude, y = coord.latitude;
- double z = sqrt(x * x + y * y) + 0.00002 * sin(y * M_PI);
- double theta = atan2(y, x) + 0.000003 * cos(x * M_PI);
- CLLocationCoordinate2D transformLocation ;
- transformLocation.longitude = z * cos(theta) + 0.0065;
- transformLocation.latitude = z * sin(theta) + 0.006;
- return transformLocation;
- }
IOS开发基础知识--碎片20的更多相关文章
- IOS开发基础知识碎片-导航
1:IOS开发基础知识--碎片1 a:NSString与NSInteger的互换 b:Objective-c中集合里面不能存放基础类型,比如int string float等,只能把它们转化成对象才可 ...
- IOS开发基础知识--碎片33
1:AFNetworking状态栏网络请求效果 直接在AppDelegate里面didFinishLaunchingWithOptions进行设置 [[AFNetworkActivityIndicat ...
- IOS开发基础知识--碎片42
1:报thread 1:exc_bad_access(code=1,address=0x70********) 闪退 这种错误通常是内存管理的问题,一般是访问了已经释放的对象导致的,可以开启僵尸对象( ...
- IOS开发基础知识--碎片50
1:Masonry 2个或2个以上的控件等间隔排序 /** * 多个控件固定间隔的等间隔排列,变化的是控件的长度或者宽度值 * * @param axisType 轴线方向 * @param fi ...
- IOS开发基础知识--碎片3
十二:判断设备 //设备名称 return [UIDevice currentDevice].name; //设备型号,只可得到是何设备,无法得到是第几代设备 return [UIDevice cur ...
- IOS开发基础知识--碎片11
1:AFNetwork判断网络状态 #import “AFNetworkActivityIndicatorManager.h" - (BOOL)application:(UIApplicat ...
- IOS开发基础知识--碎片14
1:ZIP文件压缩跟解压,使用ZipArchive 创建/添加一个zip包 ZipArchive* zipFile = [[ZipArchive alloc] init]; //次数得zipfilen ...
- IOS开发基础知识--碎片16
1:Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id) 对象在运行时获取其类型的能力称为内省.内省可以有多种方法实现. 判断对象类型 -(BOO ...
- IOS开发基础知识--碎片19
1:键盘事件顺序 UIKeyboardWillShowNotification // 键盘显示之前 UIKeyboardDidShowNotification // 键盘显示完成后 UIKeyboar ...
随机推荐
- android帧动画,移动位置,缩放,改变透明度等动画讲解
1.苦逼的需求又来了,需要实现一些动画效果,第一个想到的是播放gif图片,但是这样会占包的资源,并且清晰度不高,于是想着程序实现,自己用帧动画+缩放+移动+透明度 实现了一些想要的效果,这里跟大家分享 ...
- Java内存模型深度解析:重排序 --转
原文地址:http://www.codeceo.com/article/java-memeory-2.html 数据依赖性 如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间 ...
- grape动态PHP结构(三)——API接口
一.app视图与控制器
- 关于Java中的final关键字
Java中的final关键字是用来限制用户行为的,说白了,就是用来限制我们这些程序员的.final可以用来修饰:变量.方法.类. 1)Java final variable final用来修饰变量时, ...
- DotNet项目中的一些常用验证操作
在项目中需要对用户输入的信息,以及一些方法生成的结果进行验证,一般在项目中较多的采用js插件或js来进行有关信息的校验,但是从项目安全性的角度进行考虑,可对系统进行js注入. 如果在后台对用户输入的信 ...
- 使用Jquery的Ajax实现无刷新更新,修改,删除页面
本文将向大家讲述一下最近工作的一些总结,主要包括了以下内容,注册界面以及详细信息界面的编辑.主要是介绍了AJAX技术,因为我觉得其他方面没什么好介绍的.首先是跟大家说一下Ajax的优点,假如你删除了一 ...
- SSE指令集优化学习:双线性插值
对SSE的学习总算迈出了第一步,用2天时间对双线性插值的代码进行了优化,现将实现的过程梳理以下,算是对这段学习的一个总结. 1. 什么是SSE 说到SSE,首先要弄清楚的一个概念是SIMD(单指令多数 ...
- SQL Server基础之游标
查询语句可能返回多条记录,如果数据量非常大,需要使用游标来逐条读取查询结果集中的记录.应用程序可以根据需要滚动或浏览其中的数据.本篇介绍游标的概念.分类.以及基本操作等内容. 一:认识游标 游标是 ...
- phpcurl 请求Chunked-Encoded data 遇到的一个问题
最早出现的问题情况是提供es的部门在es的外部封装了一个gateway做请求中转. 当我们转换到gateway上之后,发现了问题: 有的请求可以获取到数据,有的请求获取不到数据. 仔细分析了业务代码, ...
- 怎样使用My97日期控件
有网友说无法使用My97日期控件,Insus.NET测试一下,是可以正常使用了. 在ASP.NET MVC环境中测试. 去官网下载My97日期控件程序包: 下载解压之后,把程序的目录拷贝至projec ...