调整 UIView 的大小但 drawRect 完成的绘图也改变了大小
Resizing a UIView but drawing done by drawRect also changing size
我正在使用 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) 被绘制到其上下文中,然后变换在它被渲染之前拉伸它。
它没有向右和向下扩展的原因是默认情况下变换的锚点是边界的中心。因此它将从中心向外扩展。来自文档:
The origin of the transform is the value of the center property ...
变换不能用于简单地缩放框架的宽度和高度。 frame
属性 就是为了这个。只需将视图的框架存储在变量中,更改其宽度和高度,然后将其设置回去。在您的 drawRect:
代码中,您可以检查提供给您的矩形的尺寸,并使您的正方形 width/height 占该尺寸的百分比。
我正在使用 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) 被绘制到其上下文中,然后变换在它被渲染之前拉伸它。
它没有向右和向下扩展的原因是默认情况下变换的锚点是边界的中心。因此它将从中心向外扩展。来自文档:
The origin of the transform is the value of the center property ...
变换不能用于简单地缩放框架的宽度和高度。 frame
属性 就是为了这个。只需将视图的框架存储在变量中,更改其宽度和高度,然后将其设置回去。在您的 drawRect:
代码中,您可以检查提供给您的矩形的尺寸,并使您的正方形 width/height 占该尺寸的百分比。