[英]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.