2017-08-20 4 views
0

メインビューに2つのボタンと1つのUIImageViewがあります。一方のボタンはUIImageViewを30度回転させ、もう一方のボタンはUIImageViewのフレームをそれ自身に更新します。CGAffineTransformで回転させた後、UIImageViewフレームを更新するときに奇妙なスキッシュが発生する

フレーム自体を視覚的に影響を与えるように設定することは期待できませんが、画像がデフォルトの向き以外の回転になっている場合は、代わりに画像が詰まるように見えます。私はUIImageViewのフレームを回転した後にxとyの座標を変更するために更新したいので、これを見つけました。

結果、回転ボタンは更新フレームボタンを押さない限り正常に動作しているようです。しかし、ビューが回転している間に2番目のボタンを押すと、画像が理解できない状態になるか、元に戻す方法がわかります。 https://streamable.com/vo3cd

このような理由は何:回転がデフォルトの向きではありませんしながら、唯一の「つぶし」第二ボタンの https://streamable.com/ba7zd

ビデオ:画像を「つぶし」第二ボタンの

ビデオ起こっている? This questionthis questionはどちらも同様のシナリオをキャプチャしているようですが、いずれのソリューションを適用するかはわかりません。

@IBOutlet weak var dog: UIImageView! 

@IBAction func breakRotate(_ sender: UIButton) { 
    self.dog.frame = self.dog.frame // squishes if rotated 
} 

@IBAction func rotateDog(_ sender: UIButton) { 
    UIView.animate(withDuration: 1.5, delay: 0, options: [.allowUserInteraction], animations: { 
     self.dog!.transform = self.dog!.transform.rotated(by: CGFloat(0.523599)) // 30 degrees in radians 
    }) 
} 

画像:のViewControllerで

enter image description here

答えて

2

回転を適用した後frameプロパティから返された値が回転フレームではない、それは囲む最小外接矩形でありますこのビューは、実際のフレームとはサイズが異なる場合があります。あなたはそれが変革を妨げることができるので、あなたがフレームを変更すべきではありませんビューに変換を適用すると

documentationは、フレームが不定となります、無視されなければならないが、現実には、それは最小外接矩形を返すと言っています) 。

あなたは、変換後の位置を変更したい場合は、ビューのcenterプロパティ変更する必要があります:あなたはそれが自動的に世話を変換しないという異例の効果を、見ている理由のためとして、最後に

dog.center = newCenterPoint 

をあなたのイメージのサイズを乱すことなくフレームを新しい最小境界矩形にリサイズすることができますが、その新しい変更されたフレームをビューに適用すると、これは変換の結果であることがわかりませんし、それがあなたのイメージがそんなにうんざりしている理由です。

関連する問題