1

在头文件中:

@property (strong,nonatomic) IBOutlet UIView *zoomView;

在 m 文件中,我用一些大小、颜色和边框宽度初始化 zoomView:

- (void)viewDidLoad
{
    [super viewDidLoad];

    //initialize the zoom rectangle
    [zoomView.layer setBorderColor: [[UIColor orangeColor] CGColor]];
    [zoomView.layer setBorderWidth: 4.0];
    [zoomView.layer setFrame: CGRectMake(zoomView.layer.frame.origin.x, zoomView.layer.frame.origin.y, 100, 200)];
}

然后在一些用户操作上,特别是捏合,我称之为代码:

-(void)redrawBox {
    [zoomView.layer setBorderWidth: 4.0];
    [zoomView.layer setNeedsLayout];
}

不幸的是,边框宽度变化很大。当框被缩小时,边框宽度会按比例增加,最终看起来非常糟糕。我已经仔细检查过是否调用了此代码并且边框宽度设置正确(如果我将宽度设置为 0,它就可以正常工作,然后框消失),但似乎 4.0 的边框宽度在不同时呈现非常不同缩放级别。

无论矩形如何缩放,如何将边框宽度设置为恒定?谢谢!

4

3 回答 3

0

尝试使用 CATiledLayer,而不是使用 CALayer。这个类知道缩放。您可以使用属性levelsOfDetaillevelsOfDetailsBias设置视图所需的分辨率。

我不确定这是否能解决您的问题,但我认为值得一试。

希望能帮助到你!

于 2013-06-17T23:01:02.390 回答
0

我已经意识到问题是transform仍然设置在盒子上,所以它会缩放边框。我想出的解决方案是:

-(void)redrawBox {
    //set the border width again so that the width doesn't change with zooming
   CGRect currentFrame = zoomView.layer.frame;
    zoomView.transform = CGAffineTransformIdentity;
    [zoomView.layer setBorderWidth: 4.0];
    [zoomView.layer setFrame: CGRectMake(currentFrame.origin.x, currentFrame.origin.y, currentFrame.size.width, currentFrame.size.height)];
}

这会以正确的大小从头开始重新绘制框,但没有设置变换,因此边框实际上是 4 点。

于 2013-06-18T14:05:21.517 回答
0

此代码在缩放 UIScrollView 时保持 CALayer 边框固定宽度。

- (void) scrollViewDidZoom:(UIScrollView *)scrollView
{
    CGFloat newBorderWidth = UIScreen.mainScreen.scale / scrollView.zoomScale;
    zoomView.layer.borderWidth = newBorderWidth;
}
于 2016-10-28T13:35:45.367 回答