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

Ios 调整UIView的大小,但drawRect完成的绘图也会更改大小,ios,uiview,drawrect,Ios,Uiview,Drawrect,我正在使用UISlider测试UIView,如下图所示: 我有一个自定义UIView,背景为黄色,可以绘制灰色正方形,drawRect方法如下: -(void)drawRect:(CGRect)rect{ NSLog(@"Draw rect called"); UIBezierPath* squarePath = [UIBezierPath bezierPathWithRect: CGRectMake(10, 10, 100, 100)]; [UIColor.gr

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

我有一个自定义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中的代码动态更改图形大小


任何指点都将不胜感激!谢谢

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

它没有向右和向下扩展的原因是,默认情况下,变换的定位点是边界的中心。因此,它将从中心向外缩放。从文件中:

变换的原点是“中心”属性的值

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