先看效果:
其实很简单,就是把UIWindow的图层给渲染到DSMagnifierView上。
由于这个放大镜要处于屏幕最上层,最好是UIWindow的子类,这样可以设置它的视图层级。
- (DSMagnifierView *)magnifierView {
if (nil == _magnifierView) {
_magnifierView = [[DSMagnifierView alloc] init];
_magnifierView.renderView = self.view.window;
}
return _magnifierView;
}
- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
[super touchesMoved:touches withEvent:event];
NSLog(@"touching");
// 获取触摸点
UITouch *touch = [touches anyObject];
CGPoint p = [touch locationInView:self.view];
//window的hidden默认为YES
self.magnifierView.hidden = NO;
//设置magnifierView的frame
self.magnifierView.frame = CGRectMake(0, 0, 150, 150);
self.magnifierView.center = p;
//设置渲染的中心点
self.magnifierView.renderPoint = p;
}
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
[super touchesEnded:touches withEvent:event];
//用完一定要记得置nil。
self.magnifierView = nil;
}