は、現在のデバイスの画面のUIImage
スナップショットを返すプライベートC関数_UICreateScreenUIImage
を、考えてみましょうそう:アクセス専用のUIKit機能
MyAppのブリッジング・HEADER.H
@import UIKit;
UIImage *_UICreateScreenUIImage(void) NS_RETURNS_RETAINED;
MyClass.swift
let image = _UICreateScreenUIImage()
print(image) // <UIImage: 0x7fc4ba6081c0>, {375, 667}
ブリッジヘッダーを使用せずに純粋なSwiftで_UICreateScreenUIImage
にアクセスできる方法はありますか?
初期の思想がUIImage
の拡張機能を作成することでしたが、拡張子が拡張に関数の本体を宣言するために私を期待している:_UICreateScreenUIImage
がないよう
extension UIImage {
public func _UICreateScreenUIImage(_: Void) -> UIImage // "Expected '{' in body of function declaration"
}
この実装は、とにかく欠陥があります方法はUIImage
です。
純粋なSwiftでもこの方法を公開してアクセスできますか?
「スクリーンショットを撮るにはどうすればよいですか」と私の質問を混同しているようです。それは私が求めていることではありません。私はSwiftのUIImage *_UICreateScreenUIImage(void);
のようなメソッドにどうやってアクセスすればよいかを尋ねています。 +(UIImage *)_deviceSpecificImageNamed:(NSString *)name inBundle:(NSBundle *)bundle;
または+(UIImage *)_pu_PhotosUIImageNamed:(NSString *)name;
のようなプライベートメソッドである可能性があります。
これは機能します。素晴らしい! 'asmname'と' _silgen_name'はどこに文書化されていますか?これはSwiftの「extern C」と同じですか? – JAL
私の知る限りでは(LLVMの内部の外には私は確信しています)。 「asmname」という用語は、他の場所でシンボルを探すようにアセンブラに指示するという意味で、実際には「extern」と同等であることを示します。 '_silgen_name'は、より具体的には、SIL生成の間に' builtin ""() '宣言を生成することを意味します(これはアセンブラによって' extern'に似ています)。 –
ありがとうございました!私はこれを受け入れたものとしてマークし、あなたに恩恵を授与することを期待しています。もう一つの質問です: 'UIImage * _ pu_PhotosUIImageNamed:(NSString *)name;'のような 'UIImage'のプライベートクラスメソッドにアクセスしたいのですが?それは同じパターンに従うでしょうか? – JAL