微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

石英2d试图重绘三角形

如何解决石英2d试图重绘三角形

| 我正在开发iPhone应用程序。 我有以下课程:
#import \"Triangulo.h\"


@implementation Triangulo

@synthesize minusValue;


- (id)initWithFrame:(CGRect)frame {
    if ((self = [super initWithFrame:frame])) {
        // Initialization code
    }
    return self;
}

// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
    CGSize size = rect.size;
    CGPoint origin = {10.0f,size.height - 10.0f};
    [self drawLineatorigin:origin withLength:size.width - 10.0f];

    CGPoint origin2 = {10.0f,size.height - 20.0f};
    CGSize size2 = {size.width - minusValue,20.0f};
    [self drawTriangleAtOrigin:origin2 withSize: size2 inRect: rect];
}

- (void)drawLineatorigin:(CGPoint)origin withLength:(float)length {
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSetlinewidth(context,2.0);
    CGContextSetstrokeColorWithColor(context,[UIColor blackColor].CGColor);

    CGContextMovetoPoint(context,origin.x,origin.y);
    CGContextAddLinetoPoint(context,length,origin.y);
    CGContextstrokePath(context);
}

- (void)drawTriangleAtOrigin:(CGPoint)origin withSize:(CGSize)size inRect:(CGRect)rect {
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextClearRect(UIGraphicsGetCurrentContext(),rect);

    CGContextSetlinewidth(context,[UIColor redColor].CGColor);
    CGContextSetFillColorWithColor(context,[UIColor redColor].CGColor);

    CGContextMovetoPoint(context,size.width,origin.y - size.height);
    CGContextAddLinetoPoint(context,origin.y);
    CGContextFillPath(context);
    CGContextstrokePath(context);

}

- (void)dealloc {
    [super dealloc];
}


@end
此UIView是UIViewController.view的一部分。我将UIViewController.h添加为:
IBOutlet Triangulo *triangulo;

...

@property (nonatomic,retain) IBOutlet Triangulo *triangulo;
在UIViewController上,我有一个修改Triangulo的按钮:
- (IBAction)btnDrawTriangleClicked:(id)sender {

    triangulo.minusValue += 10.0f;

    CGRect rect = CGRectMake(0,280,50);

    [triangulo drawRect: rect];
}
但是我什么也画不出来,因为ѭ3总是为零。 有什么建议吗?     

解决方法

        将此代码添加到您的
Triangulo
类中:
- (void)setMinusValue:(double)aMinusValue {
    minusValue = aMinusValue;
    [self setNeedsDisplay];
}
然后将“ 6”方法转换为以下内容:
- (IBAction)btnDrawTriangleClicked:(id)sender {
    triangulo.minusValue += 10.0f;
}
现在,当您更改
minusValue
时,
Triangulo
会自动将其自身标记为需要重新显示。 (有关更多信息,请参见查看绘图周期)。正如Deepak所说,您永远不会自己叫ѭ10(除非您本身在
drawRect:
方法之内,而您叫
[super drawRect:frame];
)。系统会自动调用
drawRect:
方法,并且始终确保事先设置了有效的
CGGraphicsContext
。由于您是直接调用它,因此准备工作尚未完成,因此ѭ15通常返回ѭ16。     ,        切勿直接致电ѭ10。每当您想重绘视图时,都应致电
setNeedsDisplay
setNeedsDisplayInRect:
。传递给
drawRect:
rect
不是传递的随机值。它告诉您视图边界中需要重绘的部分。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?