Ios 将值传递给UIView将返回nil

Ios 将值传递给UIView将返回nil,ios,uiview,uiviewcontroller,Ios,Uiview,Uiviewcontroller,我有一个UIViewControllerGamePlayViewController和一个UIViewJoystickView 我正在尝试将浮点值设置为JoystickView 在GamePlayViewController.m JoystickView *joystick = [[JoystickView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; joystick.velocity = 123.0f; [self.view addSu

我有一个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


我缺少什么?

在调用initWithFrame之后,您正在设置速度。因此,NSLog输出将为0。

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

NSLog(@"%f", velocity); 

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

您可以通过创建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;
}

在评估
NSLog(@“%f”,速度)时
,则
initWithFrame:
方法尚未完成执行,因此尚未执行赋值
goodage.velocity=123.0f
(请记住这是按顺序执行的)。这就是为什么NSLog输出的值是浮点值的默认初始化值(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];

你在调用init with frame后设置速度OK我想在viewController添加init with frame后会调用它,谢谢这似乎是最好的,而且效果很好,我还不能接受答案,但2分钟后我可以;)这似乎不是传递a的问题的答案,因此,如果这是您正在寻找的答案,我建议您重写该问题,以询问如何将属性设置为作为参数传递给视图初始化的值。
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];