【问题标题】:10 degrees rotation image cut off10 度旋转图像被截断
【发布时间】:2009-08-03 13:20:56
【问题描述】:

我用以下方式旋转我的图像:

UIImage *image = [UIImage imageNamed:@"doneBtn.png"];
CGImageRef imgRef = image.CGImage;

CGFloat width = CGImageGetWidth(imgRef);
CGFloat height = CGImageGetHeight(imgRef);

CGAffineTransform transform = CGAffineTransformIdentity;
CGRect bounds = CGRectMake(0, 0, width, height);
transform = CGAffineTransformRotate(transform, degreesToRadians(10));

UIGraphicsBeginImageContext(bounds.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextConcatCTM(context, transform);

CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(0,0,width,height), imgRef);
UIImage *imageCopy = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

img.image=imageCopy;

当我显示图像时,我在 10 度以下看到它,但图像的边缘被截断。

有人知道如何解决这个问题吗?这是一张用于澄清的图片。

alt text http://img197.imageshack.us/img197/7077/problemkfr.png

昨天我一直在尝试,但无法弄清楚。

另一个示例图像:

alt text http://img25.imageshack.us/img25/3370/afbeelding6b.png

【问题讨论】:

    标签: iphone image uiimageview rotation


    【解决方案1】:

    SliderAppViewController.h 中的代码

    #import <UIKit/UIKit.h>
    
    @interface SliderAppViewController : UIViewController {
        IBOutlet UIImageView *imgView;
        IBOutlet UISlider *mySlider;
    }
    @property (nonatomic, retain) IBOutlet UISlider *mySlider;
    - (IBAction) sliderValueChanged:(id)sender;  
    
    @end
    

    SliderApp.m 中的代码

    #import "SliderAppViewController.h"
    
    @implementation SliderAppViewController
    @synthesize mySlider;
    
    - (IBAction) sliderValueChanged:(UISlider *)sender {  
    
        imgView.transform = CGAffineTransformMakeRotation(45);
    
    } 
    - (void)viewDidLoad {
        mySlider.minimumValue = 1.0;
        mySlider.maximumValue = 100.0;
    
            //other code
    }
    

    然后在 IB 中建立连接

    【讨论】:

      【解决方案2】:

      您的问题是您的 CALayer 的锚点,我这里没有示例代码,但是如果您使用视图 CALayer 的锚点属性,您应该能够使视图看起来像您想要的那样。稍后我会尝试发布一些示例代码

      【讨论】:

      • 你有旋转视图的截图吗?如果我看一下,我可能会想出需要设置的锚点
      • 假设这就是问题所在:)
      • 它实际上和我上面的示例图像相同,度数和图像大小几乎相同。
      • 我添加了另一张图片,我进行了编辑。我希望这会更清楚一点,它只是一个“完成”系统按钮 png。它现在也镜像了,但这将是以后的问题,我首先希望它向右旋转。
      • 你知道发生了什么吗?视图锚定在 0,0,您是逆时针旋转(对吗?),因此当您旋转视图时,视图锚定在 0,0 顶部消失,请尝试将锚点设置为 0.5。 5 看看你得到了什么结果,(不会很完美,但你可能会弄清楚)如果我在正确的轨道上,请告诉我
      【解决方案3】:

      我现在解决了,我必须更改边界的宽度/高度值和 CGContextDrawImage中的x/y

      CGRect bounds = CGRectMake(0, 0, width+10, height+10);
      CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(10,0,width,height), imgRef);
      

      【讨论】:

      • 我知道这会解决问题,但我认为这不是最终解决方案,因为您可能需要将这些值更改为更大的数字,因为您增加了正在转换的图像的大小。你有没有机会找到真正的解决方案?谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-26
      • 2014-12-01
      相关资源
      最近更新 更多