调整UIView的大小,但drawRect完成的绘图也会改变大小

时间:2015-10-17 20:26:56

标签: ios uiview drawrect

我正在使用UISlider测试UIView,如下面的示例图片所示:

enter image description here

enter image description here

我有一个黄色背景的自定义UIView绘制灰色方块,drawRect方法是这样的:

-(void)drawRect:(CGRect)rect{

    NSLog(@"Draw rect called");

    UIBezierPath* squarePath = [UIBezierPath bezierPathWithRect: CGRectMake(10, 10, 100, 100)];
    [UIColor.grayColor setFill];
    [squarePath fill];
}

我的幻灯片更改值的方法:

- (IBAction)changeValue:(id)sender {

    CGAffineTransform transform = CGAffineTransformScale(CGAffineTransformIdentity, self.slider.value, self.slider.value);
    self.tableView.transform = transform;
    [self.tableView setNeedsDisplay];



}

我不明白为什么广场变大了。我注意到每次移动滑块时都会调用drawRect。如果发生这种情况,为什么方形尺寸会发生变化?它不应该保持相同的大小,只是框架与左上角的方块一起生长?

我的第二个问题是,我如何更改代码以便框架增长并且图纸尺寸保持不变?我问这个是因为实际上我希望使用drawRect中我自己的代码动态更改绘图大小。

任何指针都会非常感激!谢谢!

1 个答案:

答案 0 :(得分:2)

方块大小变化的原因是因为你已经改变了它。转换不仅影响视图的框架;它们会影响内容。正方形以其恒定大小(100x100)被绘制到其上下文中,然后变换在渲染之前将其拉伸。

它没有向右和向下扩展的原因是因为默认情况下,变换的锚点是边界的中心。因此,它将从中心向外扩展。来自文档:

  

变换的原点是中心属性的值......

转换不是用于简单地缩放框架的宽度和高度。 frame属性就是为了这个。只需将视图的框架存储在变量中,更改其宽度和高度,然后将其设置回来。在drawRect:代码中,您可以检查给定的矩形的尺寸,并使正方形的宽度/高度占其百分比。