iOS 7 使用CGAffineTransformMakeRotation在autolayout佈局下旋轉圖片變形.
今天將專案的佈局換成了autolayout,結果遇到一個很奇葩的問題,使用CGAffineTransformMakeRotation旋轉圖片時,在iOS 8以上的版本都沒有問題,但是在iOS 7上出現了怪怪的效果.想都不用想肯定是autolayout的問題嘍,簡單粗暴的方法,換回手碼唄.可是對於一個懶貨來說,能拖線解決的絕對不手碼.因為不同於之前了嘛,現在4種螢幕了,手碼好累
錯誤原因: 約束設定的是水平和垂直位置固定,距離左右邊距固定,等比例拉伸.約束如下:
因為圖片是正方形的,設定距離邊距固定值的話,轉到角角處圖片就給壓縮了.(手殘,大家湊合看吧) 有人會問,為什麼在iOS 8以上就沒問題呀?只能告訴你蘋果在高版本上處理了這個比較不符合常理的問題吧
解決辦法:
1. 上面說的,簡單粗暴的方法:關掉autolayout,使用純手碼
2. 你可以偷點懶,因為高版本的沒有問題,只需要適配一下低版本就好了.思路是不設定邊距就不會拉伸了,所以設定水平和垂直距離然後固定死大小就好了.當然你不能在storyboard中同時設定這兩種,所以只能手碼了,不過肯定比你純手碼簡單.
// 箭頭適配
if ([UIDevicecurrentDevice].systemVersion.floatValue < 8.0) {
NSMutableArray* cons = [NSMutableArrayarray];
for (NSLayoutConstraint
if (con.firstItem == self.arrow || con.secondItem == self.arrow)
[cons addObject:con];
[self.viewremoveConstraints:cons];
[self.arrowremoveConstraints:self.arrow.constraints];
[self.viewaddConstraint:
[NSLayoutConstraint
[self.viewaddConstraint:
[NSLayoutConstraintconstraintWithItem:self.arrowattribute:NSLayoutAttributeCenterYrelatedBy:0toItem:self.viewattribute:NSLayoutAttributeTopmultiplier:1constant:self.arrow.center.y]];
[self.arrowaddConstraint:
[NSLayoutConstraintconstraintWithItem:self.arrowattribute:NSLayoutAttributeWidthrelatedBy:0toItem:nilattribute:0multiplier:1constant:self.arrow.bounds.size.width]];
[self.arrowaddConstraint:
[NSLayoutConstraintconstraintWithItem:self.arrowattribute:NSLayoutAttributeHeightrelatedBy:0toItem:nilattribute:0multiplier:1constant:self.arrow.bounds.size.height]];
}
注意: 別人說設定錨點,其實沒有用的.
_arrow.layer.anchorPoint = CGPointMake(0.5, 0.5);