CGRectMake:如何计算X和Y对于UIPickerViewanimation?
我的故事板上有这个UIPickerView:
这里是基于Size Inspector的位置:
这是我的代码:
- (void)showPickerView { [UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{ self.picker.frame = CGRectMake(0 , 288, self.picker.frame.size.width, self.picker.frame.size.height); self.picker.hidden = NO; } completion:^(BOOL finished) { }]; }
(经过反复试验)为了正确放置(底部)在4英寸的屏幕上,我必须设置288为Y.我不知道这个数字来自哪里。
因为如果你在这里做一些小math,你将不会得到这个数字:
iPhone屏幕高度= 1136px,pickerview高度= 216pts = 432px
如果X和Y从TOP-LEFT(0,0)测量,那么对于4英寸的屏幕,我应该使用1136 – 432 = 704 px / 2 = 352pts。 不是288点
但根据尺寸检查员的起源,这个对象从左下angular测量。 所以,X和Y的(0,0)现在从BOTTOM-LEFT测量。 你仍然不会得到这个数字。
加上,甚至更糟糕…当我在3.5英寸的模拟器上运行它没有完全显示。
如何为UIPickerView提供X和Y值,以便3.5和4英寸的视网膜显示屏完美显示?
谢谢。
1136px
的大小是全屏的,你必须考虑到状态栏有20px,导航栏有44px,所以你的计算是这样的:
1136px - 432(picker) - 40(status bar) - 88(navigation bar) = 576; 576/2 = 288px
这就是为什么288px是为你工作。
如果你想给你的select器视图给予适当的坐标,你必须做这样的事情:
self.picker.hidden = NO; [UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{ self.picker.frame = CGRectMake(0 , self.view.fra.size.height - self.picker.frame.size.height, self.picker.frame.size.width, self.picker.frame.size.height); } completion:^(BOOL finished) { }];
但是要小心,当你调用这个-viewDidAppear:
时候,确保你调用它或调用了-viewDidAppear:
之后,这一点非常重要。 由于你希望这段代码在3.5英寸和4英寸的屏幕上都能很好地工作,所以在调用这个方法之前,视图将不会被正确resize,而且框架也是不正确的,特别是当你使用storyboard或者xib创build视图控制器与视图为4英寸显示。
Robert,UIPicker的位置总是从左上angular开始测量, UIPicker坐标是uipicker
中心的uipicker
。
例如,如果你给(0,0),它会显示四分之一的pickerview,即右下angular的季度。
由于uipicker高度固定为216,所以需要Y c0-坐标超过或= 216/2 = 108。 而要看到全宽,你需要X坐标(select器宽度/ 2)
我认为最好的方法是使用包含视图的边界属性,这应该是视图控制器的根视图。
UIPickerView的高度是216像素,如本文所示 – 初始化Picker View时默认设置此值。
所以,如果我们考虑danypata的职位,但不想手动计算导航栏高度,状态栏高度等设置值…我们可以做如下事情:
UIPickerView *pickerView = [[UIPickerView alloc] init]; // default frame is set float pvHeight = pickerView.frame.size.height; float y = view.bounds.size.height - pvHeight; // the root view of view controller [UIView animateWithDuration:0.5f delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{ self.picker.frame = CGRectMake(0 , y, pickerView.frame.size.width, pvHeight); } completion:nil];