1.// 准备布局的时候调用 ,当布局刷新(改变)-----
这个方法是UICollectionViewLayoutAttributes中的方法
- (void)prepareLayout {
[superprepareLayout];
}
2.// 当可见范围发生变化的时候, 就会重新布局-----
这个方法是UICollectionViewLayoutAttributes中的方法
- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds {
return YES;
}
3.屏幕发生旋转的时候,会重新布局
下面这两个方法只有在控制器中才能使用,如果在一般的view中使用layoutsubviews;
1.//将要旋转到某个方向的时候调用此方法(iOS8之前)
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
//Landscape : 横屏 Portrait: 竖屏
// 传入一个方向值, 如果是横屏, 则返回YES
if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)) {
NSLog(@"横屏");
}
// 传入一个方向值, 如果是竖屏, 则返回YES
if (UIInterfaceOrientationIsPortrait(toInterfaceOrientation)) {
NSLog(@"竖屏");
}
}
2.#pragma mark iOS8以后的方法
// 如果实现了iOS8以后的方法, 则旧版方法会覆盖
//这是UIViewController的方法
//视图发生了大小改变的时候会调用此方法 大小改变 == 横竖切换
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
NSLog(@"size; %@", NSStringFromCGSize(size));
// 建议如果背景色不一致的情况下, 做动画同步的处理, 否则视觉上很不舒服
//动画同步 --> 系统默认0.25 而选择是0.4
[UIView animateWithDuration:[coordinator transitionDuration] animations:^{
//方法一:
if (size.width == HMScreenMaxWidth1024) {
NSLog(@"横屏");
self.dockView.width = HMDockMaxWidth;
self.dockView.height = HMScreenMinWidth768;
} else {
NSLog(@"竖屏");
self.dockView.width = HMDockMinWidth;
self.dockView.height = HMScreenMaxWidth1024;
}
}];
//方法二
// if (size.width > size.height) {
// NSLog(@"横屏");
// }
//方法三 orientation: 方向
// if ([UIDevice currentDevice].orientation == UIDeviceOrientationLandscapeLeft || [UIDevice currentDevice].orientation == UIDeviceOrientationLandscapeRight) {
// NSLog(@"横屏");
// }
}
4.layoutsubViews(一般view的frame发生变化,view中子控件重新布局)-----这个是view中的方法
5.控制器中的方法:viewwilllayoutgubviews,viewDidlayoutsubviewsviews-------这个是viewcontroller中的方法,这两个方法每次启动控制器的时候都会调用两次。