背景图像在旋转时重复一秒钟

时间:2014-08-19 19:08:04

标签: ios objective-c xcode5

我已经设置了我的背景图像,以便在使用下面的代码旋转设备时进行调整,并且它工作正常(图片在横向上拉伸,但没关系),除了它旋转时,瞬间,在重新缩放以填充视图之前,图片会重复。

-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
if (UIDeviceOrientationIsPortrait([UIDevice currentDevice].orientation))
{
    UIGraphicsBeginImageContext(self.view.frame.size);
    [[UIImage imageNamed:@"MainBackground.PNG"] drawInRect:self.view.bounds];
    UIImage *image=UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    self.view.backgroundColor=[UIColor colorWithPatternImage:image];


}
if (UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation))
{
    UIGraphicsBeginImageContext(self.view.frame.size);
    [[UIImage imageNamed:@"MainBackground.PNG"] drawInRect:self.view.bounds];
    UIImage *image=UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    self.view.backgroundColor=[UIColor colorWithPatternImage:image];

}
}

我想也许使用“willanimaterotation ..”可能会掩盖这一点,但它仍然明显令人恼火。

对所有这些都是新手,无论如何要纠正这个/我是否会完全错误?猜测我认为我可能需要一种方法来在图像旋转之前缩放图像,但我不确定如何对其进行编码或者是否可能进行编码。

目前,我个人认为修复它的唯一方法是为肖像和风景创建2个单独的图像文件,我真的不想这样做。

1 个答案:

答案 0 :(得分:0)

UIImageView是去这里的方式。

请注意,您在if中使用willAnimateRotationToInterfaceOrientation条件每次都会返回相同的结果。此外,使用这种方法是不必要的。相反,让AutoresizingMask管理您的观看次数。

示例:

- (void)viewDidLoad
{
    UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"MainBackground.PNG"]];
    [imageView setAutoresizingMask: (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin)];
    [self.view addSubview:imageView];
}