将iPad旋转到横向方向时调整UIImageView的尺寸

时间:2015-11-25 13:37:27

标签: ios objective-c ipad uiimageview uipageviewcontroller

我有一个简单的应用,当UIPageViewController中的单元格被点击时,会显示UITableViewControllerUIPageViewController(称为Leaflets)在iPhone和iPad上以非常好的布局显示6张图片:

- (void)imageDimensions
{
    [self.view setBackgroundColor:[UIColor clearColor]];
    CGRect insetFrame;
    if (IDIOM == IPAD)
    {
        NSLog(@"iPad");
        insetFrame = CGRectMake(160, 70, self.view.frame.size.width-320, self.view.frame.size.height-115);

    }
    else
    {
        NSLog(@"iPhone");
        insetFrame = CGRectMake(30, 20, self.view.frame.size.width-60, self.view.frame.size.height-15);

    }

    _imageView = [[UIImageView alloc] initWithFrame:insetFrame];
    [_imageView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];
    [_imageView setImage:[UIImage imageNamed:_model.imageName]];
    [[self view] addSubview:_imageView];

}

当我将iPad旋转到Landscape模式时,理想情况下,我希望insetFrame更改,以便图像不会在屏幕上伸展。

我尝试在NSNotification中添加viewDidLoad

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deviceRotated:) name:UIDeviceOrientationDidChangeNotification object:nil];

哪个电话:

-(void)deviceRotated:(NSNotification*)notification
{
    NSLog(@"Rotation");
    CGRect insetFrame;
    insetFrame = CGRectMake(160, 70, self.view.frame.size.width-620, self.view.frame.size.height-715);
    _imageView = [[UIImageView alloc] initWithFrame:insetFrame];
    [_imageView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];
    [_imageView setImage:[UIImage imageNamed:_model.imageName]];
    [[self view] addSubview:_imageView];


}

这里的方法肯定会被调用,但有两个问题。

问题

如果不向视图添加imageView,则不会对图片进行任何更改,如果我保留了上面显示的方法,则会将图像添加到现有图像的顶部。

理想情况下,我想从视图中删除图像并重置其纵向模式的坐标。

[_imageView removeFromSuperview]; 

如果我在deviceRotated方法中设置它,则每次旋转视图时都会调用它,因此它总是会移除等等。

我想说一种方式,如果横向显示此框架,如果是肖像,则显示此框架。

对此的任何指导将不胜感激。

1 个答案:

答案 0 :(得分:1)

您是否尝试将显示设置为重绘和重新布局?

CGRect insetFrame;
insetFrame = CGRectMake(160, 70, self.view.frame.size.width-620, self.view.frame.size.height-715);
_imageView = [[UIImageView alloc] initWithFrame:insetFrame];
[_imageView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];
[_imageView setImage:[UIImage imageNamed:_model.imageName]];
[_imageView setNeedsDisplay];
[_imageView setNeedsLayout];

这可能适合你。删除[[self view] addSubview:_imageView]行肯定;你要反复将它添加到显示器上。