2

Airplay または HDMI アダプターを使用して、iOS アプリを大画面で実演したいと考えています。

問題は、私のアプリが縦向きモードでしか実行されず、ほとんどのテレビが 16:9 の縦横比であるため、iPhone の画面が非常に小さいことです。これを修正するには、テレビを回転させ、iPhone の出力を回転させてディスプレイを大きくしたいと考えています。

iOS6 では CADisplayLink を使用し、現在の画面のスナップショットを取り、それを外部画面に描画しました。残念ながら、古いコードは iOS 7 では機能しなくなり、動作が遅くなりました。これに適したフレームワークはありますか?

フレームワークの提案がない場合は、これをより効率的にするのを手伝ってもらえますか?

私のコードは現在次のようになっています。

- (UIImage *) screenshot {
    UIView* view = [[UIScreen mainScreen] snapshotViewAfterScreenUpdates:YES];
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, [UIScreen mainScreen].scale);

    [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES];


    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}

- (void)drawFrame
{
    UIImageView* contentView = (UIImageView *)[self.secondWindow.rootViewController.view viewWithTag:[@"contentView" hash]];
    CGImageRef screenImg = [self screenshot].CGImage;//UIGetScreenImage();

    contentView.image = [UIImage imageWithCGImage:screenImg scale:1.0 orientation:UIImageOrientationLeft];
}
4

1 に答える 1

0

スクリーンショット関数を次のように変更して、iPhone 5s で十分に高速に動作するようにしました。

- (UIImage *) screenshot {
    UIView* view = [[[[UIApplication sharedApplication] delegate] window] rootViewController].view;
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, 2);
    CGContextSetInterpolationQuality(UIGraphicsGetCurrentContext(), kCGInterpolationNone);
    [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:NO];

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}

最初の行を変更する前に、iPhone の画面で画面がちらつくこともありました。また、InterpolationQuality の変更も役立ちました。

古い iPhone でコードを実行している場合は、ImageContext のスケール (UIGraphicsBeginImageContextWithOptions関数の最後のパラメーター) を に設定することもできます1。これにより、2 番目の画面で「網膜」解像度が無効になり、レンダリングが大幅に高速化されます。

于 2014-02-08T11:51:06.917 に答える