2011-02-25 5 views
0

내 응용 프로그램에서 한 번에 같은 NIB의 여러 창을 표시해야하며 타이머 기준으로 닫히거나 해제됩니다.NSWindow setFrame | 화면의 setPosition

창 위치를 제외한 모든 것이 정상적으로 작동합니다. . 내 요구 사항은 정확히 이전 창 아래에 창을 표시해야합니다, 같은 NIB의 모든 창이 존재하는 경우 새 창에 대한 원점을 계산할 수 있어요.

나는 원점을 얻기 위해이 기능을 사용하고 있습니다 : 이전 창으로가있는 경우는 약간 아래에 기존 윈도우의 오른쪽을 향해, 새로운 포인트를 그리는 경우

-(void)awakeFromNib{ 

    NSString *eventMsg = [NSString stringWithFormat:@"%s is set “,eventName]; 
    [pTextField setStringValue:eventMsg]; 

    [pWindow setFrameOrigin:[self pointstoDisplayScreen]]; 

    /* On timer callback , i will show the fadeout and fadein effects*/ 
    [self startTimer]; 
}  

/* This method returns the coordinate where to 
    draw the window 
*/ 
-(NSPoint)pointstoDisplayScreen{ 
    NSRect frame = [[NSScreen mainScreen] visibleFrame]; 
    NSRect windowRect = [pWindow frame]; 

    CGFloat yCoordinate = frame.size.height-windowRect.size.height; 

    NSPoint point = NSMakePoint(frame.size.width - windowRect.size.width, frame.size.height-windowRect.size.height); 

    /* Let there be some gap, if any window present and let it draw below to 
     the existing window 
    */ 
    point.y -= (windowRect.size.height + windowOffset)*noOfWindow; 
    NSLog([NSString stringWithFormat:@"PositionToDisplayScreen x = [%f] y = [%f]",point.x,point.y ]); 

    return point; 
} 

문제는이다

내가 필요한 속성이 있습니까, 문제는 이전 위치가 정확히 오른쪽 상단에있는 경우 반대 구석에 새 창을 그립니다.

답변

0

계산 된 새 원점이 화면 경계 내에 있는지 확인하기 위해 경계 검사를 수행하지 않으므로 창의 위치가 "점프"됩니다.

클래스 NSScreen은 화면에 대한 세부 정보를 제공합니다. 각 화면에 대한 설명은 frame입니다.

이제 창 원점 이동 방법을 결정해야합니다. 예 : 화면 가장자리에 그리고 더 이상 인접한 화면에 하나가있는 경우, 줄 바꿈 (오른쪽에서 왼쪽으로 올 때 의미) 등이 선택 사항은 응용 프로그램에 따라 다릅니다.

화면 프레임과 이동 알고리즘으로 무장하면 새로운 원점을 계산할 수 있습니다.

+2

[NSWindowController setShouldCascadeWindows : NO] 이것은 내가 뭘 찾고 있었는지, 고마워. – Amitg2k12

1
[NSWindowController setShouldCascadeWindows:NO]; 

이 설정을 통해 작업이 완료되면 화면의 오른쪽 상단에 모든 알림 그림이 표시됩니다.
감사합니다.