IOS核心图形重绘

Posted

技术标签:

【中文标题】IOS核心图形重绘【英文标题】:IOS Core Graphics redrawing 【发布时间】:2014-10-22 21:22:57 【问题描述】:

所以我在核心图形中绘制了一些我想在用户按下按钮时旋转的东西。在我的故事板中,我有一个视图和一个按钮。我有一个子类 UIView 的 Cocoa Touch 类,并且 View 的自定义类设置为这个子类。在这里,我有一个属性用于存储我希望绘图旋转的度数。在'- (void)drawRect:(CGRect)rect' 方法中我有

int lineRotate = self.rotationAmount;
UIBezierPath * line = [UIBezierPath bezierPath];
[line moveToPoint:CGPointMake(55.0, 55.0)];
[line addLineToPoint:CGPointMake(55.0, 25.0)];
[line applyTransform:CGAffineTransformMakeTranslation(-55, -55)];
[line applyTransform:CGAffineTransformMakeRotation(lineRotate * M_PI/180)];
[line applyTransform:CGAffineTransformMakeTranslation(55, 55)];
[line setLineWidth: 5.0];
[[UIColor blackColor]setStroke];
[line stroke];

我也有一个公共方法来设置这个 rotationAmount。从我的 ViewController 类中,我导入了我创建的 UIView 子类。我有一个类的属性,我对其进行了初始化,等等。调用此方法来更改旋转量,然后从按钮的 IBAction 中更改 setNeedsDisplay 不会执行任何操作。我需要更改或添加什么才能使按钮正常工作?

【问题讨论】:

【参考方案1】:

我猜问题出在您没有显示的代码中。 UIViewController 通常不需要初始化UIView 的属性。在控制器的方法中,可以self.view访问视图,但一般不用自己设置。您是否正在创建第二个视图并修改该视图的rotationAmount,而不是self.view

【讨论】:

【参考方案2】:
- (IBAction)actionTapped:(id)sender 
_customView.rotationAmount = 50;
_customView.setNeedsDisplay;

确保在调用 setNeedsDisplay 之前更改了 rotationAmount。 正如您在问题中解释的那样,我创建了一个项目。而且我可以旋转这条线。

【讨论】:

以上是关于IOS核心图形重绘的主要内容,如果未能解决你的问题,请参考以下文章

vue基本知识点

JPanel 图形清除和重绘?

第11章 图形的保存和重绘

监控组选择生效时间的窗口

QGLWidget - 如何使用重绘构建程序

简单的小重绘