我在UIScrollView中有一个UIImageView。图像应该是可缩放的,所以我在滚动视图的viewForZoomingInScrollView
方法中返回它:
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
return _imageView;
}
目标是在此图像周围绘制一个1像素宽的框。该框应调整大小以围绕UIIMageView,而不缩放其线条的粗细。可以将其视为PowerPoint或任何图像编辑程序中图像的指南/框。
我创建了一个名为CALayer
的{{1}},其中包含在图片周围绘制的borderBoxLayer
。
我尝试了以下4种方法:
1-将此图层添加到UIImageView不会起作用,因为它也会缩放框线(因为它们是UIImageView的一部分)。盒线应始终为1像素宽。
2-我使用CADisplayLink每帧REDRAW图层
UIBiezerPath
在CADisplayLink *displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(updateLayers)];
[displayLink setPreferredFramesPerSecond:60];
[displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
内,我得到imageView的当前帧,以便能够更改updateLayers
的帧。这种方法部分工作"部分"。盒子的位置和大小按预期工作,但是有一个滞后,使它变得华丽"放大/缩小时。我还尝试删除图层并使用更新的框架重新添加图层,但结果相同。
3-我创建了一个假的UIView,它位于ScrollView的顶部,我使用相同的显示链接将borderBoxLayer
添加到此borderBoxLayer
。它减少了滞后,但它仍然存在。
4-还尝试在fakeView
方法中调用updateLayers
,例如UIScrollViewDelegate
,scrollViewWillBeginDragging
等。并将我自己的scrollViewDidEndZooming
添加到滚动视图并在处理程序中调用UIPinchGestureRecognizer
,但比方法#2和#3慢得多。
我得到的最好成绩来自#2和#3。但是,滚动视图缩放的刷新率高于我的CADisplayLink。
知道如何以更高的速度拨打updateLayer
或达到我想要的结果吗?
感谢。
图片标题:左侧:原始图片大小。在右边:放大但是盒子厚度是一样的。
答案 0 :(得分:1)
设置borderWidth
imageView
imageView.layer.borderWidth = 1.0
imageView.layer.borderColor = //Whatever color
因此,如果边框也会放大,您可以在borderWith
中将scrollViewWillBeginDragging
设置为0.0并在scrollViewDidEndZooming
中将其设置为1.0