我有一个简单的应用,当UIPageViewController
中的单元格被点击时,会显示UITableViewController
。 UIPageViewController
(称为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
方法中设置它,则每次旋转视图时都会调用它,因此它总是会移除等等。
我想说一种方式,如果横向显示此框架,如果是肖像,则显示此框架。
对此的任何指导将不胜感激。
答案 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]行肯定;你要反复将它添加到显示器上。