UIScrollView在pagingEnabled=YES,然后旋转屏幕后的错误显示问题
屏幕旋转后会停在页面中间的位置。
今天偶然遇到了这个问题,
首先用了之前解决自定义Transition的屏幕旋转bounds的设置问题的解决方法,开线程!
等待系统屏幕旋转后再进行bounds的设置,旋转前设置相当于没设置,所以开一个零点几秒的延迟来做这个。
在以下这两个方法中开线程:
1:ViewController的方法:
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration;
UIWindow *window = [UIApplication sharedApplication].keyWindow;
CGFloat x = _pageControl.currentPage * window.bounds.size.height;
[_scrollView setContentOffset:CGPointMake(x, 0) animated:NO];
今天偶然遇到了这个问题,
首先用了之前解决自定义Transition的屏幕旋转bounds的设置问题的解决方法,开线程!
等待系统屏幕旋转后再进行bounds的设置,旋转前设置相当于没设置,所以开一个零点几秒的延迟来做这个。
在以下这两个方法中开线程:
1:ViewController的方法:
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration;
2:监视系统通知:
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(orientationChanged:)
name:UIApplicationDidChangeStatusBarFrameNotification
object:nil];
- (void)orientationChanged:(NSNotification *)notification;
方法中添加的线程代码:
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
UIWindow *window = [UIApplication sharedApplication].keyWindow;
CGFloat x = _pageControl.currentPage * window.bounds.size.width;
[_scrollView setContentOffset:CGPointMake(x, 0) animated:NO];
});
}
然后发现略笨。。而且视图转换会略显突兀(会有令人不快的其他页面的内容乱入)。。
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(orientationChanged:)
name:UIApplicationDidChangeStatusBarFrameNotification
object:nil];
- (void)orientationChanged:(NSNotification *)notification;
方法中添加的线程代码:
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
UIWindow *window = [UIApplication sharedApplication].keyWindow;
CGFloat x = _pageControl.currentPage * window.bounds.size.width;
[_scrollView setContentOffset:CGPointMake(x, 0) animated:NO];
});
}
然后发现略笨。。而且视图转换会略显突兀(会有令人不快的其他页面的内容乱入)。。
后来发现简单的方法:
不用开线程,直接在方法中将width和height颠倒即可:
CGFloat x = _pageControl.currentPage * window.bounds.size.height;
[_scrollView setContentOffset:CGPointMake(x, 0) animated:NO];
完美解决问题。
评论
发表评论