BOOL值 isShow直接标记,添加到superView时,isShow = YES,从superView移除时,isShow = NO。
某些情况下,需判断当前ViewController是否正在显示,比如后台网络请求报错,我们可能只希望在发起请求的页面d窗提示用户,当用户已经跳转到其他界面,不做d窗,减少对用户的干扰。
假如一个UIView对象当前正在显示,那么它的window属性肯定为非空值。虽然官方文档未说明UIView未显示时window属性的取值, 但是经过简单的测试,大部分情况下UIView未显示时,window的值为空,因此依据此判断当前UIViewController是否正在显示。
其原理是将两个view的坐标convert 到相对于同一个view的坐标,再对比
你实现BMKMapViewDelegate这个协议 里面有很多委托方法 / 点中底图空白处会回调此接口 @param mapview 地图View @param coordinate 空白处坐标点的经纬度 / - (void)mapView:(BMKMapView )mapView onClickedMapBlank:(CLLocat
之前做的外包项目中要实现一个时间轴,效果类似这种
思路是cell中添加一条线,然后在view中再添加两个UIView,利用convertRect:(CGRect)rect toView:(nullable UIView )view 方法,转换坐标系,获取x,y, 宽高。
之后设置滚动监听,动态变化高度。
很简单,先创建一个TableViewCell + xib 文件, 拖一个UIView ,拉好约束。
这样简单的完成初步样子,但是下拉以及空白部分的时间轴是没有的,那么接下来添加这两个部分的UI。
新建两个UIView 初始化好,添加到view 上
接下来就是解决两个view 的x,y坐标 还有宽高
然后用UISrcollwView代理方法 监听滚动,动态改变高度
好了到这里就实现了时间轴的效果,看看效果图
// 开始,公司要求制作一段跑步轨迹 在地图上的 动画回放, 传入一段经纬度,
开始一想,这不是很简单吗, 高德地图有可以把经纬度转换成坐标点的方法
/
@brief 将经纬度转换为指定view坐标系的坐标
@param coordinate 经纬度
@param view 指定的view
@return 基于指定view坐标系的坐标
/
- (CGPoint)convertCoordinate:(CLLocationCoordinate2D)coordinate toPointToView:(UIView )view;
// 我把经纬度转换成坐标点, 然后构建 path
/ 构建path, 调用着负责释放内存 /
- (CGMutablePathRef)pathForPoints:(CGPoint )points count:(NSUInteger)count
{
if (points == NULL || count <= 1)
{
return NULL;
}
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddLines(path, NULL, points, count);
return path;
}
// 在然后直接用 path ,初始化一个 CAShapeLayer ,做成动画不就成了 吗, 在它跑完之后直接删除, 再用 高德地图的折线替换,
// 这种方法也可以, 但是后来需求改了, 要求地图旋转,并且地图中心点一直在跑动的点上,
这样,我以屏幕坐标构建的 path 一旦地图旋转, 就全乱了,
// 后来我又想到一个办法, 我从地图手机上定位画线得到的灵感, 我把经纬度点两个两个连成一个个短的折线,放到一个数组里面 ,然后定义了一个 index 属性, 再用一个定时器不停的循环, 在定时器的方法中,用
[selfmapView addOverlay:selfmapOverlayArr[selfindex] level:MAOverlayLevelAboveRoads];
不停加载线路在地图上, 同时把地图的中心点, 定位在 经纬度数组取到的最新的经纬度上
CLLocation location = selflocationArray[selfindex];
[selfmapView setCenterCoordinate:locationcoordinate animated:NO];
,这样就能保证地图中心一直在跑动的点上, 而且定时器 方法 加载线路够快的话, 就能产生动画效果,
然而, 又出现了问题, 定时器不停的运行
mapView 不停的加载 addOverlay ,使得屏幕非常卡, 经纬度少的话还看不出来, 一旦经纬度多了, 卡的不要不要的, 完全受不了, 而且手机非常烫, 电池都快烧坏了,, 所以这种方法不可行, 至少不完善
// 后来我研究高德地图的画线方法, 发现一个 方法
/
@brief 重新设置折线坐标点 since 500
@param coords 指定的经纬度坐标点数组, C数组,内部会做copy,调用者负责内存管理
@param count 坐标点的个数
@return 是否设置成功
/
- (BOOL)setPolylineWithCoordinates:(CLLocationCoordinate2D )coords count:(NSInteger)count;
// 这个方法只用一条折线, 但是可以不停的改变这条折线的位置,
终于利用这个方法 不卡了, 画线的过程中 FPS 60 左右, 完美
// 因为文件太大就 不上传了
以上就是关于iOS判断View是否正显示在当前屏幕上全部的内容,包括:iOS判断View是否正显示在当前屏幕上、iOS的api里怎么获取两坐标间的距离、iOS时间轴的实现与设计思路分享等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)