是否有可能从创建的UIView获取UIImage snapshotViewAfterScreenUpdates?
snapshotViewAfterScreenUpdates当作为子视图添加时,UIView返回看起来很好,但是下面会产生一个黑色图像:
UIView *snapshotView = [someView snapshotViewAfterScreenUpdates:YES];
UIImage *snapshotImage = [self imageFromView:snapshotView];
- (UIImage *)imageFromView:(UIView *)view
{
UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, 0.0);
// [view.layer renderInContext:UIGraphicsGetCurrentContext()]; // <- same result...
[view drawViewHierarchyInRect:view.bounds afterScreenUpdates:NO];
UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}
Run Code Online (Sandbox Code Playgroud)
当然可以在不依赖的情况下获取图像snapshotViewAfterScreenUpdates:
UIImage *snapshotImage = [self imageFromView:someView];
Run Code Online (Sandbox Code Playgroud)
不幸的是,在捕捉复杂视图时,drawViewHierarchyInRect速度无法与之匹敌snapshotViewAfterScreenUpdates.我希望UIImage从创建的视图中获取它会更快snapshotViewAfterScreenUpdates,这可能吗?
我需要准确地跟踪centerCoordinate的MKMapView同时用户放大/平移的地图,即,之间的regionWillChangeAnimated:和regionDidChangeAnimated:事件.
我通过尝试锁定MKAnnotation地图的中心来测试以下方法.不幸的是,它们都不能很好地运作:
使用UIPanGestureRecognizer(如描述这里):这个工作得很好,而显示器被触摸,但在地图上是动画的触摸手势完成后不更新.此外,更新滞后于实际centerCoordinate.
使用UIScrollViewDelegateI 子类化MKMapView来接收scrollViewDidScroll:事件.这很有效,但是每次滚动增量都不会触发事件,从而导致生涩的更新.
使用KVO通知:按照这种模式,我试着观察mapview的centerCoordinate.它适用于userLocation,但似乎没有发送通知centerCoordinate.
有关如何centerCoordinate有效准确跟踪的任何想法?
KVO似乎是最好的选择.有没有窍门,以使其与工作MKMapView的centerCoordinate性质?