簡體   English   中英

旋轉后UIImageView的高度和寬度發生變化

[英]UIImageView height and width changes after rotation

大家好,我一直在嘗試使用兩個UISlider來操縱一個UIImageView。 一個滑塊縮放圖像,另一個滑塊旋轉圖像。 但是,當我從一個滑塊切換到另一個滑塊時,它將重置先前的旋轉。 (因此,如果我將圖像縮放到通常為100x100時說125x125,然后使用另一個滑塊旋轉圖像,它將旋轉它,但將其大小更改回100x100,反之亦然)。 因此,無論如何,我嘗試使用CGAffineTransformConcat結合這兩個轉換,我嘗試在每次轉換后設置ImageView的框架,我嘗試將imageView刪除並讀取到_myArray以“保存”它,並且我短暫地嘗試了使用定位點,但是所有沒有運氣。 所以我的問題是,我在做什么錯??? 我覺得我的代碼應該工作,並且每個動作都不應重置UIImageView,但我不知道為什么不這樣做。

- (IBAction)scaleImage:(UISlider *)sender {
    NSLog(@"ScaleImage Called");
    UIImageView *selectedImage = [_myArray objectAtIndex:0];
    CGAffineTransform transform = CGAffineTransformScale(CGAffineTransformIdentity, sender.value, sender.value);
    selectedImage.transform = transform;
    _scaleValue = sender.value;
    //_width = selectedImage.frame.size.width
    //_height = selectedImage.frame.size.height
    _sizeLabel.text = [NSString stringWithFormat:@"%d", _scaleValue];
}

- (IBAction)rotateImage:(UISlider *)sender {
    UIImageView *selectedImage = [_myArray objectAtIndex:0];
    //selectedImage.frame = CGRectMake(selectedImage.frame.origin.x, selectedImage.frame.origin.y, _width, _height);
    selectedImage.transform = CGAffineTransformMakeRotation(sender.value * 2*M_PI / sender.maximumValue);
    _rotationLabel.text = [NSString stringWithFormat:@"%d", _rotationValue];
    _rotationValue = sender.value;

}

有誰知道為什么每種方法都會重置其他方法先前的轉換。

查看代碼時,您會注意到您正在通過Identity轉換將轉換顯式設置為新值。

CGAffineTransform transform = CGAffineTransformScale(CGAffineTransformIdentity, sender.value, sender.value);

您將要做的是將兩者一起應用...您可以將旋轉變換和比例變換保存為屬性,而IBAction將更新它們,然后將變換設置為兩者的串聯。

因此,規模看起來像:

self.scaleValue = sender.value;

旋轉看起來像:

self.rotateValue = sender.value * 2*M_PI / sender.maximumValue;

您將擁有另一種稱為transform的方法

-(void)transform
{
    CGAffineTransform fullTransform = CGAffineTransformMakeRotation(self.rotateValue);
    CGAffineTransformScale(fullTransform, self.scaleValue, self.scaleValue);
    UIImageView *selectedImage = [_myArray objectAtIndex:0];
    selectedImage.transform = fullTransform;
}

然后,您將在IBAction調用的最后調用該transform方法,而不是嘗試單獨設置轉換

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM