在头文件中:
@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会在不同时呈现非常不同缩放级别。
无论矩形如何缩放,如何将边框宽度设置为常量?谢谢!
答案 0 :(得分:0)
尝试使用CATiledLayer而不是使用CALayer。这个类知道缩放。
您可以使用属性levelsOfDetail
和levelsOfDetailsBias
来设置视图所需的分辨率。
我不确定这是否能解决您的问题,但我认为值得尝试。
希望它有所帮助!
答案 1 :(得分: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个点。
答案 2 :(得分:0)
此代码在缩放UIScrollView时保持CALayer边框固定宽度。
require('../folderX/folderY/Class1.php');
$object = new Class1($parameter);