UiviewControllerでスクリーンショットを取る最初の良好な瞬間はどこですか -- ios フィールド と objective-c フィールド と uiviewcontroller フィールド 関連 問題

Where is the first good moment to take a screenshot in UIViewController












0
vote

問題

日本語

ビューがロードされているときに私のビューのスクリーンショットを作りたいです。この方法を使用します。

<事前> <コード> on mouseUp sendCommandX (X being the number of the button clicked) end 3

<コード> on mouseUp sendCommandX (X being the number of the button clicked) end 4 メソッドはテストされ、うまく機能しました。 on mouseUp sendCommandX (X being the number of the button clicked) end 5 のMy UiviewControllerのメソッドを使用しています。問題は灰色の画像であるということです!ビューが import pandas616 メソッドにロードされていないという意味です。 on mouseUp sendCommandX (X being the number of the button clicked) end 7 に同じ問題が守れることができます。 so on mouseUp sendCommandX (X being the number of the button clicked) end 8 と<コード> on mouseUp sendCommandX (X being the number of the button clicked) end 9 は早すぎます。 on sendCommandX echo "you clicked button X: end 0

で回避策を作成しました: <事前> <コード> on sendCommandX echo "you clicked button X: end 1

on sendCommandX echo "you clicked button X: end 2 のせずにスクリーンショットを作成する方法

英語

I would like to make a screenshot of my view when view is loaded. I use this method:

- (UIImage *)screenshot {     UIGraphicsBeginImageContextWithOptions(self.bounds.size, self.opaque, 0.0f);      if( [self respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)] ) {         [self drawViewHierarchyInRect:self.bounds afterScreenUpdates:YES];     } else {         [self.layer renderInContext:UIGraphicsGetCurrentContext()];     }      UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext();     UIGraphicsEndImageContext();      return screenshot; } 

The screenshot method was tested and works well. I am using the method in my UIViewController in viewDidLoad. The problem is that the result is a grey image! It's mean that view is not loaded in viewDidLoad method. The same issue can be observe in viewDidAppear. So viewDidLoad and viewDidAppear are too early. I have made workaround in viewDidLoad method:

__weak MyUIViewController *weakSelf = self;  dispatch_async(dispatch_get_main_queue(), ^() {     UIImage* image = [weakSelf.view screenshot]     // do sth with image... }); 

How to make a screenshot without dispatach_async ?

</div
        
   
   

回答リスト

1
 
vote
vote
ベストアンサー
 

これを試してみてください:

<事前> <コード> - (UIImage *)screenshot { UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, [UIScreen mainScreen].scale); [self.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; }

uiview-jtviewtoImageプロジェクトも便利です。

 

Try This:

- (UIImage *)screenshot {     UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, [UIScreen mainScreen].scale);     [self.layer renderInContext:UIGraphicsGetCurrentContext()];     UIImage *image = UIGraphicsGetImageFromCurrentImageContext();     UIGraphicsEndImageContext();     return image; } 

UIView-JTViewToImage project also usefull.

</div
 
 
 
 
1
 
vote

<コード> snapshotViewAfterScreenUpdates メソッド UIView

を試すこともできます。 <事前> <コード> [self.view snapshotViewAfterScreenUpdates:YES];
 

You could also try the snapshotViewAfterScreenUpdates method of UIView:

[self.view snapshotViewAfterScreenUpdates:YES]; 
</div
 
 
   
   
0
 
vote

これを試してください

New APIはiOS 7以降に追加されました。これはスナップショットを取得する効率的な方法を提供する必要があります

snapshotViewAfterScreenUpdates: unmodifiable で<コード> UIView に表示します。

<コード> resizableSnapshotViewFromRect:afterScreenUpdates:withCapInsets :同じことですが、 resizable insets

<事前> <コード> drawViewHierarchyInRect:afterScreenUpdates:

同じことすべてのサブビューを描画する必要がある場合(Labels、ボタン...)

それが役立つことを願っています。

 

Try this

New API has been added since iOS 7, that should provide efficient way of getting snapshot

snapshotViewAfterScreenUpdates: renders the view into a UIView with unmodifiable content

resizableSnapshotViewFromRect:afterScreenUpdates:withCapInsets : same thing, but with resizable insets

drawViewHierarchyInRect:afterScreenUpdates:  

same thing if you need all subviews to be drawn too (like labels, buttons...)

Hope it helps.

</div
 
 

関連する質問

0  NavigationControllerでViewControllerの回転を無効にする  ( Disabling rotation for viewcontroller in navigationcontroller ) 
ビューコントローラを無効にしたいときに回転を無効にすることもできます。 すべての方向をサポートするナビゲーションコントローラでは? 1つの特別ビューのために私は肖像画モードのみを許可されることができます、私は何も仕事をしていないように見えたのですが、これはこれ...

6  uiviewControllerがModalDialogとして呼び出されたかどうかを判断する方法  ( How to determine if a uiviewcontroller has been called as modaldialog ) 
私のアプリでは、PUSHとMODALDIALOGの両方でUIViewControleを呼び出すことができます。 PUSHまたはMODALダイアログとして呼び出された場合は、UIViewControllerがアクティブになると、どうすればよいですか。 ...

0  exc_bad_accessオブジェクトは解放されませんか?  ( Exc bad access although objects are not freed ) 
コードには、次のような問題があります。 <事前> <コード> UITableViewController *controller = nil; switch (indexPath.row) { case 0: control...

0  ReloadData:Event Handlerで呼び出された場合、CollectionViewの項目は一時的に "Jumbled":  ( Items in a collectionview temporarily jumbled when reloaddata called in event ) 
私は次のような状況があります: 私はそれぞれのボタンを含むCollectionViewを持っています CellForItemAtIndexPath :,セルの[IndexPath row] に応じて各ボタンに文字列を設定します。 ボタンのアクション方式では...

0  ウィンドウを呼び出す方法は異なりますか? Objective-Cで  ( Different ways to call window in objective c ) 
私は疑問に思っていました:さまざまなチュートリアルでは、通常、デフォルトで設定されている2行目の代わりに最初の2行を使用します。 <事前> <コード> properties0 (RootViewControllerは通常デフォルトで設定されているため)は何で...

0  プログラムボタンを呼び出すときにインスタンスに送信された認識されていないセレクタ  ( Unrecognized selector sent to instance when calling back button programmatically ) 
テーブルからレコードをクリックすると詳細ビューを表示しています。 を使用して詳細ビューから戻るボタンを呼び出すと <事前> <コード> - (IBAction)loadDispensary { [self.navigationController p...

0  プッシュしたいたびにUiviewControllerを作成する必要がありますか?  ( Should i create an uiviewcontroller every time i want to push it ) 
これはおそらく新しい質問です... 私はiPhoneアプリでメモリ使用量を減らしようとしています。 uiviewControllerは一連のボタンを持っています。ユーザーがそれらのどれかをタップすると、アプリは彼を新しい画面に移動します(新しいUiview...

0  誰かが私にiOSでInitWithNibnameの使用を説明できますか? [閉まっている]  ( Can someone explain the use of initwithnibname in ios to me ) 
ここで尋ねられていることを知るのは難しいです。この問題はあいまい、曖昧で、不完全で、過度に広く、または修辞的であり、現在の形で合理的に回答することはできません。再開できるようにこの質問を...

2  ViewDidLoadでビューをロードする方法  ( How to load a view in viewdidload ) 
プログラムの先頭に2回目のビューを読み込みたいです。私は、ViewDidload-Methodeが正しい方法になると考えました。問題はうまくいかないということです。 ViewDidload-Methodでビューをロードしたい理由は、新しいデバイス(iPad...

0  ナビゲーションコントローラでコントローラを表示します  ( View controller with a navigation controller ) 
あなたは私にガイド/チュートリアル/サンプルを正しく実装する方法を指すことができますか? 私は最初のビューで望んでいます(それはビューコントローラです)ボタンがあります。 ボタンをクリックすると2番目のビューに移動します。 2枚目のビューにはナビゲーションコン...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有