在做视图展示是,为了保留原视图(如:视频、图片等)的比例不被改变,就必需把原始图进行 等比例缩放,以更好的展示。可以分为 4 种情况:
横屏展示横屏视图:
竖屏展示竖屏视图:
横屏展示竖屏视图:
竖屏展示横屏视图:
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| /** 等比例缩放子视图以适应父视图展示
@param subSize 子视图原始 size @param parentSize 父视图原始 size @return 等比例缩放后 frame */ + (CGRect)scaleWithSubSize:(CGSize)subSize inParentSize:(CGSize)parentSize { CGRect resultRect = CGRectMake(0, 0, 0, 0); if (0 == subSize.width || 0 == subSize.height) { return resultRect; } CGFloat subDivisor = parentSize.width / parentSize.height; // 子视图比例因子(宽/高) CGFloat parentDivisor = subSize.width / subSize.height; // 父视图比例因子(宽/高) CGFloat resultH; CGFloat resultW; CGPoint originP; if (subDivisor > parentDivisor ) // 等高缩放 { resultH = parentSize.height; resultW = resultH * parentDivisor; } else if ( subDivisor < parentDivisor) // 等宽缩放 { resultW = parentSize.width; resultH = resultW / parentDivisor; } else // 等比例缩放 { resultW = parentSize.width; resultH = parentSize.height; } // 起点位置 originP.x = (parentSize.width - resultW) / 2.0f; originP.y = (parentSize.height - resultH) / 2.0f; ; resultRect = CGRectMake(originP.x, originP.y, resultW, resultH); return resultRect; }
|
效果