Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 动态更改UIView的位置_Iphone_Objective C_Uiview - Fatal编程技术网

Iphone 动态更改UIView的位置

Iphone 动态更改UIView的位置,iphone,objective-c,uiview,Iphone,Objective C,Uiview,这是我的设置。我有一个正在创建并添加为子视图的viewcontroller。viewcontroller提供了一些用户可以选择的选项。按下viewcontroller以响应“长按”手势。在viewcontroller中,我添加了一个子UIView以将一些其他控件组合在一起,这样我可以将它们作为一个单元在屏幕上移动,并且在显示它们时,将它们置于长按位置的中心。以下是实例化视图控制器、更改其位置并将其添加为子视图的代码: UserOptions *opts = [[UserOptions alloc

这是我的设置。我有一个正在创建并添加为子视图的viewcontroller。viewcontroller提供了一些用户可以选择的选项。按下viewcontroller以响应“长按”手势。在viewcontroller中,我添加了一个子UIView以将一些其他控件组合在一起,这样我可以将它们作为一个单元在屏幕上移动,并且在显示它们时,将它们置于长按位置的中心。以下是实例化视图控制器、更改其位置并将其添加为子视图的代码:

UserOptions *opts = [[UserOptions alloc] initWithNibName:@"UserOptions" bundle:nil];
[opts recenterOptions:location];
[self.view addSubview:opts.view];
这段代码确实创建并推送了viewcontroller,但是调用recenterOptions没有任何作用。以下是该方法:

- (void) recenterOptions:(CGPoint)location {
    CGRect oldFrame = self.optionsView.frame;

    CGFloat newX = location.x; // + oldFrame.size.width / 2.0;
    CGFloat newY = location.y; // + oldFrame.size.height / 2.0;

    CGRect newFrame = CGRectMake(newX, newY, oldFrame.size.width, oldFrame.size.height);

    self.optionsView.frame = newFrame;
}
请注意,self.optionView是我添加到viewcontroller nib的子UIView

有人知道我为什么无法更改UIView的位置吗

问候,,
埃里克有几件事。首先,在调用-recenterOptions之前,尝试将视图添加到视图层次结构中:

UserOptions *opts = [[UserOptions alloc] initWithNibName:@"UserOptions" 
                                                  bundle:nil];
[self.view addSubview:opts.view];
[opts recenterOptions:location];
接下来,只需设置视图的中心,而不是尝试更改其框架:

- (void) recenterOptions:(CGPoint)location {
    [[self optionsView] setCenter:location];
}
您是否正在验证您的选项视图是否有效(非零)


我同意Rob,顺便说一句。您需要更改标题以匹配您的问题。

视图是惰性加载的。在调用
self.view
之前,不会加载视图,并且optionView为nil,因此
self.optionView.frame=newFrame
不会执行任何操作。

此问题的标题与问题本身无关。您可能需要更新它以获得更好的响应。这就成功了。反转这两个调用使代码正常工作。我会更新标题的。不知道我第一次是怎么做的。