1. 程式人生 > >iOS 7 使用CGAffineTransformMakeRotation在autolayout佈局下旋轉圖片變形.

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

* con inself.view.constraints)

if (con.firstItem == self.arrow || con.secondItem == self.arrow)

                [cons addObject:con];

        [self.viewremoveConstraints:cons];

        [self.arrowremoveConstraints:self.arrow.constraints];

        [self.viewaddConstraint:

         [NSLayoutConstraint

constraintWithItem:self.arrowattribute:NSLayoutAttributeCenterXrelatedBy:0toItem:self.viewattribute:NSLayoutAttributeLeftmultiplier:1constant:self.arrow.center.x]];

        [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);