UIInterfaceOrientation保持纵向

时间:2013-03-01 17:11:34

标签: ios objective-c uiinterfaceorientation

我有一个标题/品牌形象,在iPad和iPhone之间发生变化,但在从纵向更改为横向时不会改变图片,这非常重要它确实如此。

我有这个HeaderView类,由tableViewControllers调用,如下所示:

self.tableView.tableHeaderView = [[HeaderView alloc] initWithText:@""];

包含UIImageView:

@interface HeaderView : UIImageView{

}
- (id)initWithText:(NSString*)text;
- (void)setText:(NSString*)text;


@end

对于M文件,我们找到了我没有得到我想要的结果的地方:

#import "HeaderView.h"

#define IDIOM    UI_USER_INTERFACE_IDIOM()
#define IPAD     UIUserInterfaceIdiomPad
@interface HeaderView()
{
    UILabel*label;
}
@end

@implementation HeaderView 

- (id)initWithText:(NSString*)text
{
    UIImage* img = [UIImage imageNamed:@"WashU.png"];
    UIImage* iPhonePortrait = [UIImage imageNamed:@"WashU2.png"];
    UIImage* image = [[UIImage alloc] init];


    UIInterfaceOrientation interfaceOrientation = [UIApplication     sharedApplication].statusBarOrientation;

        //different header image for different devices...
    if(IDIOM==IPAD){
        image = img;
    }
    else{
        if(UIInterfaceOrientationIsPortrait(interfaceOrientation)){
        image = iPhonePortrait;
        }
        else if(UIInterfaceOrientationIsLandscape(interfaceOrientation))
        {
            iPhonePortrait = nil;
            image = img;
        } 
    }    
    [headerImageView setImage:image];
    if (self = [super initWithImage:image]){

    }

    return self;
}

我也添加了这些方法:

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation         {
    return YES;
}

-(BOOL)shouldAutorotate {
    return YES;
}

-(NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskAll;
}

我确信这是一个经典的问题,但我有点难过。另外,如果我删除

[headerImageView setImage:image]; 

[self addSubview:headerImageView];

,图像仍显示,表示

if (self = [super initWithImage:image])

正在进行所有的显示工作。

3 个答案:

答案 0 :(得分:0)

didRotateFromInterfaceOrientation在旋转后发送到您的视图控制器,您可以实现它来更改您的图像。

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
      ...change your image here
}

答案 1 :(得分:0)

您实际上并未将图像分配给imageView。添加:

headerImageView.image = image;

在'image'设置之后的某个地方(基于iPad vs iPhone和Portrait vs Landscape)。

答案 2 :(得分:0)

作为您的代码,您不需要分配(UIImage *)图像属性,因为您将分配(UIImage *)img或(UIImage *)iPhonePortrait。并且应该将图像分配给headerImageView.image。

[headerImageView setImage:image];