UIScrollView在pagingEnabled=YES,然后旋转屏幕后的错误显示问题

屏幕旋转后会停在页面中间的位置。
今天偶然遇到了这个问题,
首先用了之前解决自定义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];
});
}

然后发现略笨。。而且视图转换会略显突兀(会有令人不快的其他页面的内容乱入)。。
后来发现简单的方法:
不用开线程,直接在方法中将width和height颠倒即可:

UIWindow *window = [UIApplication sharedApplication].keyWindow;
CGFloat x = _pageControl.currentPage * window.bounds.size.height;
[_scrollView setContentOffset:CGPointMake(x, 0) animated:NO];

完美解决问题。

评论

此博客中的热门博文

使__attribute__((annotate("xxx")))能作用于OC函数

viewWillAppear不执行的解决办法

iOS中使用xpc/xpc.h