3

我有一个 UIViewControllerGamePlayViewController和一个 UIView JoystickView

我试图将浮点值设置为JoystickView.

GamePlayViewController.m

JoystickView *joystick = [[JoystickView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];

joystick.velocity = 123.0f;
[self.view addSubview:joystick];

JoystickView.h

@property(nonatomic) float velocity;

.m

@synthesize velocity;
-(id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
    NSLog(@"%f", velocity);        //output is 0
}
return self;
}

我错过了什么?

4

5 回答 5

3

您可以通过创建 initWithFrameAndVelocity 方法来覆盖 initWithFrame

-(id)initWithFrame:(CGRect)frame andVelocity:(float)v {
self = [super initWithFrame:frame];
if (self) {
velocity = v;
    NSLog(@"%f", velocity);        //output is 0
}
return self;
}
于 2013-07-31T16:00:11.103 回答
2

在评估您的 时NSLog(@"%f", velocity);,该initWithFrame:方法尚未完成执行,因此joystick.velocity = 123.0f尚未执行分配(请记住这是按顺序执行的)。这就是为什么 NSLog 输出的值是float (0) 的默认初始化值。

您可以通过在分配后向右移动NSLog来解决此问题。

JoystickView *joystick = [[JoystickView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
joystick.velocity = 123.0f;
NSLog(@"%f", joystick.velocity); // prints 123.0
[self.view addSubview:joystick];
于 2013-07-31T16:07:56.763 回答
1

velocity在方法之后设置属性initWithFrame:,但您NSLog在内部initWithFrame:。此时,速度尚未设置

于 2013-07-31T15:56:21.510 回答
1

把你的

NSLog(@"%f", velocity); 

在 initWithFrame 之后。据您的应用所知,velocity 尚未初始化为 123.0f,因此它将显示为 0。

于 2013-07-31T15:58:38.433 回答
0

您在调用 initWithFrame 后设置速度。所以 NSLog 输出将为 0。

于 2013-07-31T15:56:16.960 回答