CALAYer边框宽度在缩放时调整大小

时间:2013-06-17 22:16:33

标签: ios objective-c

在头文件中:

@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会在不同时呈现非常不同缩放级别。

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

3 个答案:

答案 0 :(得分:0)

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

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

希望它有所帮助!

答案 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);