Kri*_*ris 24 iphone cocoa-touch objective-c uikit
我在iPad应用程序中遇到了横向模式的问题.
我创建了一个非常小的新项目来显示我的问题我将pList中的UIInterfaceOrientation设置为UIInterfaceOrientationLandscapeRight
在app delegate中
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[self.window makeKeyAndVisible];
MyController *myController = [[MyController alloc] init];
[self.window addSubview:myController.view];
return YES;
}
Run Code Online (Sandbox Code Playgroud)
在MyController中
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
NSLog(@"Bounds Height:%f %f", self.view.bounds.size.height, self.view.bounds.size.width);
}
Run Code Online (Sandbox Code Playgroud)
我也试过在viewDidLoad中使用相同的结果
如果我在横向保持设备的同时启动应用程序NSLog输出
Bounds Height: 1004.000000 Bounds Width: 768.000000
Run Code Online (Sandbox Code Playgroud)
我需要做些什么才能获得正确的结果?我是这个iOS编程的新手,我要做的就是将UISlider锚定到屏幕的底部,但是当我得到不正确的坐标时,我不确定该怎么做.
Rac*_*elD 58
我不认为原来的问题在这里得到了回答,因为我遇到了同样的问题.
这里的关键是,如果模拟器/设备处于横向模式,然后启动程序,则self.view.(框架或边界)将检索纵向高度和宽度.如果您的程序已在运行,然后您旋转它会给出正确的值.仅当在横向启动设备且未旋转设备时才会发生这种情况.
有没有其他人找到解决方案或知道我做错了什么?求求你了,谢谢你.
可能解决方案
我之前从viewDidLoad方法调用了我的方法.事实证明,视图仍在转变.通过从一切完成后调用的viewDidAppear调用我的函数,我运气更好.
希望有所帮助.
occ*_*lus 12
你过早地检查框架和边界大小.
而是在轮换后检查它们:
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
NSLog(@"Bounds %@", NSStringFromCGRect(self.view.bounds));
NSLog(@"Frame %@", NSStringFromCGRect(self.view.frame));
}
Run Code Online (Sandbox Code Playgroud)
(注意我的用法NSStringFromCGRect- 方便!)
这会产生输出:
Bounds {{0, 0}, {1024, 748}}
Frame {{0, 0}, {748, 1024}}
Run Code Online (Sandbox Code Playgroud)
所以在这个输出中框架是"错误的",但边界是你所期望的.事实上,框架实际上并没有错,这就是框架 - >边界计算的发生方式.所以你需要访问边界.
另请参阅或许我对UIKit中的帧和边界有正确的理解吗?
NB viewDidAppear比你在事物计划中想象的要快.根据Apple文档:"viewDidAppear通知视图控制器其视图已添加到窗口中." 换句话说,它可以在应用任何旋转之前发生.
Sam*_*Sam 10
我有同样的问题,并像这样黑客攻击:
- (CGSize)getRotatedViewSize
{
BOOL isPortrait = UIInterfaceOrientationIsPortrait(self.interfaceOrientation);
float max = MAX(self.view.bounds.size.width, self.view.bounds.size.height);
float min = MIN(self.view.bounds.size.width, self.view.bounds.size.height);
return (isPortrait ?
CGSizeMake(min, max) :
CGSizeMake(max, min));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17367 次 |
| 最近记录: |