gpt4 book ai didi

ios - 调整 UIView 的大小但 drawRect 完成的绘图也改变了大小

转载 作者:行者123 更新时间:2023-11-28 21:38:02 24 4
gpt4 key购买 nike

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

enter image description here

enter image description here

我有一个带有黄色背景的自定义 UIView,它绘制灰色方 block ,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];



}

我不明白为什么广场越来越大。我注意到每次移动 slider 时都会调用 drawRect。如果发生这种情况,那么为什么正方形大小会发生变化?它不应该保持相同的大小,只是框架随着左上角的正方形增长吗?

我的第二个问题是,我如何更改代码才能使框架变大而绘图大小保持不变?我问这个是因为实际上我希望在 drawRect 中使用我自己的代码动态更改绘图大小。

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

最佳答案

正方形的大小之所以改变,是因为你对它进行了变形。转换不仅会影响 View 的框架;还会影响 View 的框架。他们会影响内容。正方形以其恒定大小 (100x100) 被绘制到其上下文中,然后转换在它被渲染之前拉伸(stretch)它。

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

The origin of the transform is the value of the center property ...

转换并非旨在用于简单地缩放框架的宽度和高度。 frame 属性就是为此而设计的。只需将 View 的框架存储在变量中,更改其宽度和高度,然后将其设置回去。在您的 drawRect: 代码中,您可以检查提供给您的矩形的尺寸,并使您的正方形的宽度/高度占该尺寸的百分比。

关于ios - 调整 UIView 的大小但 drawRect 完成的绘图也改变了大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33191261/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com