0

看起来我可能已经找到了我早期问题之一的答案,并且很乐意在 SO 上发布解决方案,尽管我首先需要确认它是否正常工作。

问题是它似乎是 - 大多数时候,尽管并非总是如此。我已经隔离了有问题的代码 - 这是我创建的一种方法,其目的是返回设备屏幕上当前可见内容的 UIImage。它看起来像这样:

+ (UIImage *)getImageVisibleOnScreenWith: (CGRect) boundingRect rotationAngle: (CGFloat) angle scalingRatio: (CGFloat) scale entireImageView: (UIImageView *) imageView actualVisibleView: (UIView *) visibleView {

    // Create a graphics context the size of the bounding rectangle
    UIGraphicsBeginImageContext(boundingRect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();

    // Rotate and translate the context
    CGAffineTransform transform = CGAffineTransformIdentity;
    transform = CGAffineTransformTranslate(transform, boundingRect.size.width/2, boundingRect.size.height/2);
    transform = CGAffineTransformRotate(transform, angle);
    transform = CGAffineTransformScale(transform, scale, -scale);

    CGContextConcatCTM(context, transform);

    // Draw the image into the context
    CGContextDrawImage(context, CGRectMake(-imageView.image.size.width/2, -imageView.image.size.height/2, imageView.image.size.width, imageView.image.size.height), imageView.image.CGImage);

    // Get an image from the context
    UIImage *viewImage = [UIImage imageWithCGImage: CGBitmapContextCreateImage(context)];

    // Clean up
    UIGraphicsEndImageContext();

    // Get the image currently on the screen (it's an intersection of specific UIImageViews)
    CGRect visibleImageRect = CGRectIntersection(imageView.frame, visibleView.frame);
    UIImage *visibleImage = (__bridge UIImage *)(CGImageCreateWithImageInRect((__bridge CGImageRef)(viewImage), visibleImageRect));

    return visibleImage;
}

我将此方法的结果传递给另一个方法,并注意到它有时会返回 nil - 没有明显的原因,至少我找不到任何原因。

像往常一样,任何想法和帮助将不胜感激;如果您需要查看更多代码,或者是否有任何不清楚的目的,也请告诉我。

4

0 回答 0