根据内容大小设置UIView的大小



是否有可能在UIView上绘制一些东西,然后,在绘制完成后,将视图调整为与以前绘制的东西相同的大小?

例如,如果我在UIView上画了一个圆,我想把UIView裁剪成我刚刚在视图上画的圆的尺寸。

我正在考虑使用CAShapeLayer作为可能的解决方案。有人知道如何转换uibezerpath到CAShapeLayer然后设置CAShapeLayer的位置吗?

I have try:

shapeLayer.path = bezierPath.CGPath;
shapeLayer.position = CGPointMake(0, 0);

你可以这么做。看一下这个例子,它将回答你的两个问题。

首先,您需要添加一个名为myViewUIView并将其附加到IBOutlet变量。

定义这个全局值用于演示:

#define POSITION    CGPointMake(50.0,50.0)
#define SIZE        CGSizeMake(100.0,100.0)

声明两个方法,一个用于在myView中绘制形状,另一个用于调整视图大小以使其适应绘制的形状:

-(void) circle
{
    CAShapeLayer *layerData = [CAShapeLayer layer];
    layerData.fillColor = [UIColor greenColor].CGColor;
    UIBezierPath * dataPath = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0.0, 0.0, SIZE.width, SIZE.height)];
    layerData.path = dataPath.CGPath;
    layerData.position = CGPointMake(POSITION.x, POSITION.y);
    [myView.layer addSublayer:layerData];
}
-(void) resize
{
    ((CAShapeLayer *)[myView.layer.sublayers objectAtIndex:0]).position = CGPointMake(0.0, 0.0);
    myView.frame = CGRectMake(POSITION.x + myView.frame.origin.x , POSITION.y + myView.frame.origin.y, SIZE.width, SIZE.height);
}

最后,在viewWillAppear:中调用两个方法:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [self circle];
    [self resize];
}

您可以运行相同的代码,只调用圆圈并调用两个方法。在这两种情况下,绘制的圆圈将在相同的位置,但在第二种情况下,myView已被调整为具有与绘制的形状相同的大小。

希望能有所帮助。

相关内容

  • 没有找到相关文章

最新更新