-
一、使用addChildViewController方法,在父控制器上添加多个子控制器;将子控制器的view添加在scrollView上;如果父控制器是导航的第一个控制器,并且在BaseViewController里面自定义了返回按钮,实现了UIGestureRecognizerDelegate代理;当滑动scrollView后,再点击子控制器的视图push,会出现界面卡住现象
解决方法:
#pragma mark - UIGestureRecognizerDelegate
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
//当在BaseViewController里面自定义了返回按钮,是导航的第一个控制器,这里需要再判断parentViewController是第几个,如果是第一个必须返回NO,否则scrollView滑动手势和侧滑手势会有冲突
BOOL isRootViewController = (self == self.navigationController.viewControllers.firstObject || self.parentViewController.navigationController.viewControllers.firstObject);
if (isRootViewController) {
return NO;
} else {
return YES;
}
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return [gestureRecognizer isKindOfClass:UIScreenEdgePanGestureRecognizer.class];
}
-
二、问题描述: iOS开发,定位当前所在地理位置偏移,坐标转换,有时会有偏差
分析:
在开发中经常会遇到定位当前位置,而且不需要有地图之类的一系列功能,一般都会用CLLocationManger来定位。但是会发现定位出来的经纬度地理反编码之后和自己当前的位置是有偏差的。这是因为坐标体系不一样。
那就让我们来看看开发者能接触到哪些坐标体系:
地球坐标,火星坐标(iOS mapView,高德,国内google,搜搜,阿里云,腾讯),百度坐标,还有一些其他自己用的一套算法偏移的坐标。由此看来火星坐标是用的最多的坐标体系。
而CLLocationManager得到的是地球坐标,要经过转换成火星坐标。转换之后进行地理反编码得到的就是当前的位置。
但是使用MKMapView得到的就是火星坐标。可以直接反地理编码然后得到当前的所在的位置。
用MKMapView来写的一份定位当前位置:https://github.com/smallqiang/MMLocationManager
使用CLLocationManager来定位当前位置:https://github.com/HQiaoOne/CLLocationManagerDeviation
其中关于iOS8以后需要新添加的内容就不再赘述了,CLLocationManagerTransform的demo里面也有。
-
三、使用UIPickerView出现代理方法
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
只在第一个分组滚动会触发,其他分组不触发
解决:
addSubview之后 [self.pickerView reloadAllComponents];或者单独reload分组
-
四、Xcode真机测试没问题,打包后安装闪退
遇到的奇葩问题是:我做好了项目,连接到电脑上,真机测试,可以运行,但是打包后安装到真机上就闪退,更奇葩的是把项目拷到别人的电脑上,让别人帮忙打包,打出来的包可以安装,搞了两天,一直在静态库和动态库上纠结了,最后没想到是证书的问题,真是醉了,下面的连接是解决的办法,把打包用到的证书从钥匙串中的信任改为系统默认就可以了!