繁体   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