在 iPad 中将一张图片分成两半

Spliting a UIImage in half issue in iPad

我有一个有很多按钮的视图,需要从中打印出来,目前我将我的视图转换为图像并直接打印它并且效果很好,现在根据要求我必须拆分图像垂直分成两半。我只需要 iPad。下面是我如何执行此操作的代码。

        UIImage *myImage = [Utilities changeViewToImage:_mainView withBounds:viewSize];
        NSLog(@"%f-%f", myImage.size.width, myImage.size.height); //409.000000-563.000000 (same for both normal iPad and retina)
        CGImageRef tmpImgRef = myImage.CGImage;
        CGImageRef topImgRef = CGImageCreateWithImageInRect(tmpImgRef, CGRectMake(0, 0, myImage.size.width, myImage.size.height/2));
        topImage = [UIImage imageWithCGImage:topImgRef];
        CGImageRelease(topImgRef);

        CGImageRef bottomImgRef = CGImageCreateWithImageInRect(tmpImgRef, CGRectMake(0, myImage.size.height / 2.0,  myImage.size.width, myImage.size.height / 2.0));
        bottomImage = [UIImage imageWithCGImage:bottomImgRef];
        CGImageRelease(bottomImgRef);

这在 iPad 7.1 上工作得非常好,我在 topImage 中得到了一半的图像,其余部分在 bottomImage 中。但是当我 运行 它在 iPad 空气或视网膜上时,我只得到 topImage 的 1/4,我不得不通过加倍宽度和相同的高度来更改 topimage 的框架设置以获得类似的结果CGImageRef topImgRef = CGImageCreateWithImageInRect(tmpImgRef, CGRectMake(0, 0, myImage.size.width, myImage.size.height/2));

但是图片又大了,我又得再缩小一次,所以目前我得检查它是正常的iPad还是视网膜并相应地调整,有没有更好的方法来做到这一点这样它就可以在正常 iPad 和 retina/air?

上工作

我能够在创建框架时使用 image.scale 选项解决这个问题,然后根据我的需要调整生成的图像的大小。

    CGImageRef tmpImgRef = myImage.CGImage;
    CGImageRef topImgRef = CGImageCreateWithImageInRect(tmpImgRef, CGRectMake(0, 0, myImage.size.width*myImage.scale, (myImage.size.height*myImage.scale)/2));
    topImage = [UIImage imageWithCGImage:topImgRef];
    CGImageRelease(topImgRef);

    CGImageRef bottomImgRef = CGImageCreateWithImageInRect(tmpImgRef, CGRectMake(0, (myImage.size.height*myImage.scale) / 2.0,  myImage.size.width*myImage.scale, (myImage.size.height*myImage.scale) / 2.0));
    bottomImage = [UIImage imageWithCGImage:bottomImgRef];
    CGImageRelease(bottomImgRef);