我有一个UIViewController GamePlayViewController
和一个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;
}
我错过了什么?
答案 0 :(得分: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;
}
答案 1 :(得分: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];
答案 2 :(得分:1)
您在velocity
方法之后设置了initWithFrame:
属性,但NSLog
位于initWithFrame:
内。此时,速度尚未设定
答案 3 :(得分:1)
把你的
NSLog(@"%f", velocity);
在initWithFrame之后。就你的应用所知,速度还没有被初始化为123.0f,因此它显示为0。
答案 4 :(得分:0)
调用initWithFrame后设置速度。因此NSLog输出将为0。