1

2 つのスライダーがあります。1 つは画像サイズを変更するためのもので、もう 1 つはこの画像を回転させるためのものです。私のイメージビューは 60x60 です。問題は、CGAffineTransformMakeRotation を使用して画像を回転させることですが、その後サイズを変更しようとすると (スライダーを使用して 60x60 から 65x65 に変更するなど)、奇妙な動作をします - 画像ビューのフレームが 80x2 のように変更されました。どうすればこれを回避できますか? 画像のサイズを変更するスライダーのコードは次のとおりです。

-(IBAction)imageSliderAction:(UISlider *)sender
{
    NSUInteger value = sender.value;
    float oldCenterX = logoImageView.center.x;
    float oldCenterY = logoImageView.center.y;
    newWidth = value;
    newHeight = value;
    CGRect frame = [logoImageView frame];
    frame.size.width = newWidth;
    frame.size.height = newHeight;
    [logoImageView setFrame:frame];
    logoImageView.center = CGPointMake(oldCenterX, oldCenterY);
}

そして、ここに私の回転スライダーのコードがあります:

-(IBAction)rotationSliderAction:(UISlider *)sender
{
    NSUInteger angle = sender.value;
    if (sender.value >= 1)
    {
        CGAffineTransform rotate = CGAffineTransformMakeRotation(angle / 180.0 * 3.14);
        [logoImageView setTransform:rotate];
    }
    if (sender.value <= 0 )
    {
        CGAffineTransform rotate = CGAffineTransformMakeRotation( (360 + sender.value) / 180.0 * 3.14);
        [logoImageView setTransform:rotate];
    }
}

回転時にフレームの幅と高さを自動変更しないようにするにはどうすればよいですか? その後、画像のサイズを正しく変更できないためです。

4

1 に答える 1

4

UIViewリファレンスから

警告: transform プロパティが恒等変換でない場合、このプロパティの値は定義されていないため、無視する必要があります。

自明でない変換を持つビューのサイズを変更する場合は、その境界プロパティを変更して行う必要があります (ビューの中心は同じままなので、その位置を維持するための追加のロジックは必要ありません)。

[logoImageView setBounds:CGRectMake(0,0,sender.value, sender.value)];
于 2013-08-23T12:26:31.293 に答える