变量bounds,width和height是当前的局部变量。我无法从其他类访问它们,甚至无法从其他方法访问它们。
如何让这些变量可用于整个实例?我已经尝试将它们放在.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
答案 0 :(得分:1)
bounds,width和height是仅存在于drawRect方法的上下文中的局部变量。
你为什么不用:
CGRect bounds = [self bounds];
float width = bounds.size.width;
float height = bounds.size.height;
在其他方法中?
答案 1 :(得分: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
答案 2 :(得分:0)
使它们成为成员变量或属性并编写访问器或合成它们。 See the Objective-C language reference
答案 3 :(得分:0)
使用getter setter或使用
生成它@property(nonatomic) CGFloat width;
@synthesize width;