-2

变量边界、宽度和高度目前是局部变量。我无法从其他类访问它们,甚至无法从其他方法访问它们。

如何使这些变量可用于整个实例?我尝试将它们放在 .h 文件中并将它们重命名为 CGFloats 无济于事。

#import "TicTacToeBoard.h"

@implementation TicTacToeBoard

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

- (void)drawRect:(CGRect)rect
{
    CGRect bounds = [self bounds];
    float width = bounds.size.width;
    float height = bounds.size.height;

    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGContextSetRGBStrokeColor(ctx, 0.3, 0.3, 0.3, 1);
    CGContextSetLineWidth(ctx, 5);
    CGContextSetLineCap(ctx, kCGLineCapRound);

    CGContextMoveToPoint(ctx, width/3, height * 0.95);
    CGContextAddLineToPoint(ctx, width/3, height * 0.05);
    CGContextStrokePath(ctx);

}

@end
4

4 回答 4

1

bounds、width 和 height 是局部变量,仅存在于 drawRect 方法的上下文中。

你为什么不使用:

CGRect bounds = [self bounds];
float width = bounds.size.width;
float height = bounds.size.height;

在其他方法?

于 2011-11-07T16:58:36.870 回答
1

您可以使用属性使其他对象可以访问变量。

在您的界面中添加如下内容:

@property (nonatomic, retain) NSString *myString;

然后添加

@synthesize mystring;

到您的实施。

将创建两个方法来获取和更改属性。

[myObject myString]; // returns the property
[myObject setMyString:@"new string"]; // changes the property

// alternately, you can write it this way
myObject.myString;
myObject.mystring = @"new string";

您可以更改类中属性的值,[self setMystring:@"new value"]或者如果您已经在接口中声明了相同的变量,然后从中创建一个属性,您可以继续在类中使用您的变量。

在开发人员文档中有更多关于属性的信息:http: //developer.apple.com/library/ios/#documentation/cocoa/conceptual/objectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17 -SW1

于 2011-11-07T17:04:57.023 回答
0

使用 getter setter 或使用

@property(nonatomic) CGFloat width;

@synthesize width;
于 2011-11-07T16:58:15.203 回答
0

使它们成为成员变量或属性并编写访问器或合成它们。 请参阅 Objective-C 语言参考

于 2011-11-07T16:57:50.023 回答