UIScrollView旋转问题
问题描述:
我有一个滚动视图,它会自动生成一系列包含图像视图的子视图。其概念是,它几乎是一个自定义PDF风格的阅读器,其中每个页面都作为图像加载到imageview中。有三个“图层” - 外部UIScrollView,子视图内自动生成的子视图和图像视图。UIScrollView旋转问题
我一直有一些麻烦,我以前问过这个问题,但不幸的是,我的问题的核心是在错误的地方。这是我的第二次尝试:
在旋转时,所有内容都根据需要旋转。不幸的是,这是我得到:
显然,我希望图像1居中,并没有图像2的提示,直到你轻扫视图。
这里是我的设置视图代码:
- (void)loadView {
[self setUpView];
}
- (void)setUpView {
//INITIALISE PAGING SCROLL VIEW
CGRect pagingScrollViewFrame = [[UIScreen mainScreen] bounds];
pagingScrollViewFrame.origin.x -= 10;
pagingScrollViewFrame.size.width += 20;
pagingScrollView = [[UIScrollView alloc] initWithFrame:pagingScrollViewFrame];
pagingScrollView.contentMode = UIViewContentModeScaleAspectFit;
//CONFIGURE PAGING SCROLL VIEW
pagingScrollView.pagingEnabled = YES;
pagingScrollView.backgroundColor = [UIColor blackColor];
pagingScrollView.contentSize = CGSizeMake(pagingScrollViewFrame.size.width*7, pagingScrollViewFrame.size.height);
//ACTIVATE PAGING SCROLL VIEW
self.view = pagingScrollView;
//ADD PAGES TO SCROLL VIEW
for (int i = 0; i < 7; i++){
ImageScrollView *page = [[[ImageScrollView alloc] init] autorelease];
[self configurePage:page forIndex:i];
[pagingScrollView addSubview:page];
}
}
如何重新定义帧的大小?我应该调用什么函数等等。我如何使图像居中?
我是新来的,所以我很抱歉我的问题的含糊之处。
干杯
答
我已经想通了。这是我需要改变的单个页面的框架,所以(在另一个问题的帮助下),我写了一个重新定位的方法。
这是因为我发现我需要遍历并为每个页面重新调整每个框架的大小,然后将这些框架重新应用于视图。为了做到这一点,我需要创建一个数组,我将填入上面的For循环。我共有7页。
然后,我可以(上旋转)拨打下方重新定向的方法来重新大小每个视图:
- (void) reOrient{
if(UIInterfaceOrientationIsPortrait(self.interfaceOrientation)){
CGRect f;
int i = 0;
for (ImageScrollView *page in pageArray) {
f = page.frame;
f.size.width = 320;
f.origin.x = (f.size.width * i);
page.frame = f;
pagingScrollView.contentSize = CGSizeMake(f.size.width * 7, 480);
i++;
}
}else{
CGRect f;
int i = 0;
for (ImageScrollView *page in pageArray) {
f = page.frame;
f.size.width = 480;
f.origin.x = (f.size.width * i);
page.frame = f;
pagingScrollView.contentSize = CGSizeMake(f.size.width * 7, 480);
i++;
}
}
}
答
这为我工作:
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
//get current page based on offset before rotation
NSInteger currentPage = self.scrollView.contentOffset.x/self.scrollView.bounds.size.width;
//set anticipated scrollview content size by switching width and height (they will be switched after rotation)
[self.scrollView setContentSize:CGSizeMake(totalPages * self.view.bounds.size.height, self.view.bounds.size.width)];
//set the anticipated content offset based on height before rotation
[self.scrollView setContentOffset:CGPointMake(currentPage * self.scrollView.bounds.size.height, 0.0f)];
}
基本上我设置内容在旋转之前对新的scrollview内容大小进行偏移(我正在为预期的高度和宽度切换高度和宽度)。
这对我旋转全屏分页UIScrollView时工作。
所有寻呼子视图的具有以下自动尺寸调整掩模,使得它们整齐旋转后落入地方:
UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleRightMargin
'pagingScrollView.contentSize = CGSizeMake(f.size.width * 7,480);'没有按不需要在for循环中为每个页面执行它。 – mahboudz 2012-09-13 18:50:31