我正在构建一个以横向和纵向模式显示图像的应用。旋转工作完美。图像也完美定位于横向模式。然而,它将其景观坐标保持为纵向,因此将其错位。请在下面找到我的代码。你能让我知道我错过了什么吗?还有一种方法可以从Xib文件中严格实现这一点吗?
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
[[self navigationController] setNavigationBarHidden:YES animated:NO];
UIImage *startImage = [UIImage imageNamed:@"title.png"];
UIImageView *startImageView = [[UIImageView alloc] initWithImage:startImage];
if (curOrientation == UIInterfaceOrientationPortrait || curOrientation == UIInterfaceOrientationPortraitUpsideDown) {
[startImageView setFrame:CGRectMake(-128, 0, 1024, 1024)];
}else{
[startImageView setFrame:CGRectMake(0, -128, 1024, 1024)];
}
[self.view addSubview:startImageView];
}
答案 0 :(得分:3)
目前,您只在首次加载视图时调用此代码。你实际上需要调用它
但是您应该在viewDidLoad中保留视图创建代码,因为您只想创建一次。
创建一个属性以保留指向视图的指针,以便您可以从代码中的所有这些位置引用它...
@property (nonatomic, weak) UIImageView* startImageView;
在viewDidLoad中创建它(但不要担心几何体,因为你可以在viewWillAppear中这样做):
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
[[self navigationController] setNavigationBarHidden:YES animated:NO];
UIImage *startImage = [UIImage imageNamed:@"title.png"];
UIImageView *startImageView = [[UIImageView alloc] initWithImage:startImage];
self.startImageView = startImageView;
[self.view addSubview:startImageView];
}
制作通用定位方法:
- (void) orientStartImageView
{
UIInterfaceOrientation curOrientation = [UIApplication sharedApplication].statusBarOrientation;
if (curOrientation == UIInterfaceOrientationPortrait || curOrientation == UIInterfaceOrientationPortraitUpsideDown) {
[self.startImageView setFrame:CGRectMake(-128, 0, 1200, 1200)];
}else{
[self.startImageView setFrame:CGRectMake(0, -128, 1200, 1200)];
}
}
从viewWillAppear调用它(每次视图出现在屏幕上时触发):
- (void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self orientStartImageView];
}
从viewWillLayoutSubviews调用它(每当视图在屏幕上并且设备旋转时触发):
- (void)viewWillLayoutSubviews
{
[super viewWillLayoutSubviews];
[self orientStartImageView];
}
顺便说一句,我不确定你的画面是否正确 - 纵向是你将左边缘移到屏幕外,在横向上你将顶边移动到屏幕外。那是你要的吗?很可能你可以在Interface Builder中实现你想要的东西,但是你的代码不清楚它是什么 - 也许你可以发布一张图片。还要检查是否已禁用Autolayout(Interface Builder的文件检查器中的复选框)以简化问题。
<强>更新强>
您可以从没有代码的Xib中执行此操作:将imageView置于其superView中,将其大小设置为最终大小(例如1200x1200),禁用Autolayout,取消选择所有弹簧和支柱,适当设置View模式(例如center
或scaleToFill
)