2013-08-04 1 views
1

기본적으로 SpringBoard의 개인 API SBAppContextHostManager를 사용하여 응용 프로그램을 표시하려고합니다. 지금까지,이 코드가 있습니다iOS (jailbroken) SBAppContextHostManager를 통해 응용 프로그램 표시

SBAppContextHostManager *app = [[objc_getClass("SBAppContextHostManager") alloc] init]; 

[app setAppBundleID:@"com.apple.springboard"]; // just as an example 

[app enableHostingForRequester:@"uniqueID" priority:1]; 

[app orderRequesterFront:@"uniqueID"]; 

SBHostWrapperView *view = [app hostViewForRequester:@"uniqueID"]; 

을하고, 그 후에 나는 응용 프로그램을 포함하는보기의있는 UIImage를 잡아

UIGraphicsBeginImageContextWithOptions([UIScreen mainScreen].bounds.size, YES, [UIScreen mainScreen].scale); 
CGContextRef c = UIGraphicsGetCurrentContext(); 
CGContextSetAllowsAntialiasing(c, YES); 
[view.layer renderInContext:c]; 
UIImage *img = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

를 호출합니다. 그러나이 UIImage의 출력이 완전히 비어있어서 SBAppContextManager에 대한 호출이 올바르지 않아 빈 SBHostWrapperView로 연결된다고 생각하게됩니다. 그렇다면이 방법으로 응용 프로그램을 어떻게 표시해야합니까?

+0

오, 그건 그렇고, 나는 정말 그게 모바일 기판의 질문을하는 가장 좋은 장소가 아니라는 것을 발견했습니다. 나는 단지 여기에있게된다. 우리 중 대부분은 irc.saurik.com의 #theos에서 놀고 있습니다. 질문을 할 때 여기에 질문하는 것보다 가장 잘 대답 할 것입니다. – eswick

+0

감사합니다. 거기에 또 다른 질문이 있습니다. 솔직히 채널이 존재한다는 단서가 없었습니다! –

답변

0

응용 프로그램의 미리보기를 얻으려는 경우 SBHostWrapperView 렌더링이 작동하지 않습니다. 보시다시피, SBHostWrapperViews는 응용 프로그램의 렌더링 결과를 복사하지 않고 단순히 화면상의 다른 위치를 제공하여 응용 프로그램을 렌더링합니다.

대신 SBUIController 클래스에서 - (SBFullscreenZoomView*)systemGestureSnapshotWithIOSurfaceSnapshotOfApp:(SBApplication*)arg1 includeStatusBar:(BOOL)arg2;을 사용할 수 있습니다.

이 메서드는 arg1에 제공된 app의 스냅 샷을 사용하여 UIView의 하위 클래스 인 SBFullscreenZoomView를 반환합니다. 제공 한 두 번째 코드 스 니펫을 사용하여 SBFullscreenZoomView의 UIImage를 얻을 수 있습니다. 그러면 특정 애플리케이션에 대한 스크린 샷 만 제공됩니다.

+0

코드가 SD 장치에있는 것처럼 약간 픽셀 화 된 것처럼 보이면 결과 이미지와 차별화 된 효과가 있습니다. 그 이유에 대한 아이디어가 있습니까? –

+0

아주 이상합니다. 망막 장치에있어? 또한 이미지에 변형을 적용하고 있습니까? 아마도 앤티 앨리어싱을 시도해보십시오. – eswick

+0

네, 이미지에 변형이없는 망막입니다. 앤티 앨리어싱을 시도한 다음 저울로 놀아 보겠습니다. –