そのため、タップしたときに CGAffineTransform を適用して、現在の状態を強調表示する UIButton (画像で構成される) があります。
- (void)animateMasterAddButton
{
CGAffineTransform buttonTransform;
// Button state hasn't been changed at this point, so selected == NO applies to when the button is *about* to be selected
if(self.masterAddButton.selected == NO)
{
CGAffineTransform buttonRotationTransform = CGAffineTransformMakeRotation((135.0 * M_PI) / 180);
buttonTransform = CGAffineTransformConcat(CGAffineTransformIdentity, buttonRotationTransform);
}
else
{
buttonTransform = CGAffineTransformIdentity;
}
[UIView animateWithDuration: 0.3
animations: ^{
self.masterAddButton.transform = buttonTransform;
}];
}
デバイスを同じ向きに保つと、これは正常に機能します。ただし、デバイスを回転させると、UIButton が非表示になりますが、これは UIButton が選択されている場合(回転変換が有効な場合のみ) に限られます。ボタンのフレームと境界をビュー コントローラーのwillRotateToInterfaceOrientation:duration:
メソッドに記録したところ、次の結果が得られました。
ボタンが選択されていない状態でデバイスを回転させる:
フレーム: {{8, 8}, {57, 57}}
境界: {{0, 0}, {57, 57}} (これらは正しい値です)
ボタンを選択してデバイスを回転:
フレーム: {{-4, -4}, {80, 80}}
境界: {{0, 0}, {0, 113.137}}
2 番目の結果のセットでは、回転した画像の角が外側に出ているため、フレームは正しく、より多くのスペースを占有します。ただし、境界は何かがおかしいことを示しています。境界幅がゼロであるため、ボタンはありますが、狭すぎてレンダリングできないと思います。
なぜこれが起こるのか、どうすれば修正できるのか、誰でも教えてもらえますか?