>

내 앱에서 새로운 UIWindow 를 만들고 싶습니다  기본 UIWindow를 통해 다음과 같이 썼지 만 작동하지 않습니다. 먼저, 나는 UIWindow 를 만듭니다  기본 창으로 키를 표시하고 새 UIWindow 를 만듭니다.  오버레이되지만 아무 일도 일어나지 않습니다.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.backgroundColor = [UIColor redColor];
    ViewController *vc = [[ViewController alloc]initWithNibName:@"ViewController" bundle:nil];
    self.window.rootViewController = vc;
    [self.window makeKeyAndVisible];
    UIWindow *window1 = [[UIWindow alloc] initWithFrame:CGRectMake(0, 0, 320, 320)];
    window1.backgroundColor = [UIColor redColor];
    window1.windowLevel = UIWindowLevelAlert;
    [window1 makeKeyAndVisible];
    return YES;
}


  • 답변 # 1

    UIWindow *window1 = [[UIWindow alloc] initWithFrame:CGRectMake(0, 0, 320, 320)];
    window1.backgroundColor = [UIColor redColor];
    window1.windowLevel = UIWindowLevelAlert;
    [window1 makeKeyAndVisible];
    
    

    마침내 window1은 메서드 var이므로 메서드가 실행 된 후 손실되므로 왜 작동하지 않는지 알고 있습니다. 그래서 나는 그것을 위해 새로운 @property를 선언한다.

    @property (strong, nonatomic) UIWindow *window2;
    
    

    그리고 다음과 같이 코드를 변경하십시오

    UIWindow *window2 = [[UIWindow alloc] initWithFrame:CGRectMake(0, 80, 320, 320)];
    window2.backgroundColor = [UIColor redColor];
    window2.windowLevel = UIWindowLevelAlert;
    self.window2 = window2;
    [window2 makeKeyAndVisible];
    
    

    작동합니다!

  • 답변 # 2

    Xcode 8 + Swift

    class ViewController: UIViewController {
        var coveringWindow: UIWindow?
        func coverEverything() {
            coveringWindow = UIWindow(frame: (view.window?.frame)!)
            if let coveringWindow = coveringWindow {
                coveringWindow.windowLevel = UIWindowLevelAlert + 1
                coveringWindow.isHidden = false
            }
        }
    }
    
    

    문서에 따라 키보드 입력과 같이 관련 좌표 값이없는 이벤트를 수신하려면 key 로 설정하십시오.  단순히 ! 대신  와이즈 비즈 :

    isHidden
    
    

    연기 효과를 위해 배경의 투명도를 제어 할 수도 있습니다 :

    coveringWindow.makeKeyAndVisible()
    
    

    이러한 창은 방향 변경을 처리해야합니다.

  • 답변 # 3

    coveringWindow.backgroundColor = UIColor(white: 0, alpha: 0.5)  object는 지역 변수입니다. 코드에서이 메서드가 부족하면이 개체는 더 이상 존재하지 않습니다. 어떤 window1  우리가 만든 개체는 UIWindow 에 추가됩니다 하지만이 배열은 모든 [[UIApplication sharedApplication] windows] 에 대해 일주일 만 참조합니다  윈도우 객체를 유지하는 것은 자신의 코드에 달려 있습니다. 왜 애플이 이렇게 달성 되었습니까?   UIWindow 를 유지하지 않기 위해 앱이 실행되는 한 객체가 존재합니다.  "영원히"기억 속에 사는 동안 존재해야하는 물체.

    또한 코드가 MRC와 함께 실행될 수 있습니다.

  • 답변 # 4

    Swift 4

    메모리 누수를 피하기 위해 Apple에서 제안한대로 이런 방식으로 사용자 정의 창을 초기화하는 것을 선호합니다.

    와이즈 비즈

    예 :

    [UIApplication sharedApplication]
    
    

  • 답변 # 5

    와이즈 비즈 추가하기  다른 UIWindow 가 아닌 mainWindow  처럼 ...

    If you want to provide a custom window for your app, you must implement the getter method of this property and use it to create and return your custom window.

    var myCustomWindow: UIWindow? = CustomWindow(frame: UIScreen.main.bounds) func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { let mainController: MainViewController = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController() as! MainViewController self.myCustomWindow?.rootViewController = mainController self.myCustomWindow?.makeKeyAndVisible() }

  • 이전 c# - 빌드 이벤트에 사용될 사용자 정의 매크로 정의
  • 다음 기본 소프트웨어 대신 다른 소프트웨어로 "git log"를 어떻게 변경합니까?