2015-08-04 3 views
3

Я создаю приложение MenuBar, для которого я использую NSPopOver. Проблема в том, что NSPopover uses NSViewController as a contentViewController, размер которого фиксируется. Мое требование состоит в том, чтобы сделать размер NSViewController гибким, а также как NSWindowController (установить минимальный размер и максимальный размер зависит от общего размера экрана). Простыми словами, как изменить размер NSViewController (NSPopOver), когда пользователь перетащит его. Я новичок в программировании на OS X.NSPopOver & NSViewController - Перетащите, чтобы изменить размер

ответ

5

Я, наконец, получил его, используя Mouse Events. Просто нужно контролировать

override func mouseDown(theEvent: NSEvent) {} 
override func mouseDragged(theEvent: NSEvent) {} 

событий и сбросить размер содержимого popOver. Надеюсь, это было бы полезно кому-то в один прекрасный день.

EDIT

override func mouseDragged(theEvent: NSEvent) { 
     var currentLocation = NSEvent.mouseLocation() 
     println("Dragged at : \(currentLocation)") 

     var newOrigin = currentLocation 
     let screenFrame = NSScreen.mainScreen()?.frame 
     var windowFrame = self.view.window?.frame 

     newOrigin.x  = screenFrame!.size.width - currentLocation.x 
     newOrigin.y  = screenFrame!.size.height - currentLocation.y 

     println("the New Origin Points : \(newOrigin)") 

     // Don't let window get dragged up under the menu bar 
     if newOrigin.x < 450 { 
      newOrigin.x = 450 
     } 

     if newOrigin.y < 650 { 
      newOrigin.y = 650 
     } 

     println("the New Origin Points : \(newOrigin)") 

     let appDelegate : AppDelegate = NSApplication.sharedApplication().delegate as! AppDelegate 
     appDelegate.popover.contentSize = NSSize(width: newOrigin.x, height: newOrigin.y) 

    } 

Это, как я отслеживал события мыши. На мышке перетащите только текущую позицию и новую позицию (до точки, где пользователь перетащил), а затем проверили, если точка меньше, чем мой размер по умолчанию для Popover i.e. (450, 650) в этом случае. Как только точка была рассчитана, просто установите размер popover.

Это всего лишь предлагаемый способ. Тогда должно быть что-то лучше, но на данный момент это то, что я сделал.

+0

Не могли бы вы уточнить? Я новичок в программировании. Я сделал приложение MenuBar с popover и хочу, чтобы пользователи изменяли размер представления popover, перетаскивая угол. Этот пост - только ключ, который я получил. –

+0

@KyleKIM Я отредактировал свой ответ. Надеюсь, это поможет. :) –

0

Вот ответ, который обрабатывает только вертикальное, но не горизонтальное изменение размера NSPopover.

override func mouseDragged(with theEvent: NSEvent) { 
     let currentLocation = NSEvent.mouseLocation() 
     let screenFrame = NSScreen.main()?.frame 

     var newY = screenFrame!.size.height - currentLocation.y 

     if newY < MIN_HEIGHT { 
      newY = MIN_HEIGHT 
     } 

     if newY > MAX_HEIGHT { 
      newY = MAX_HEIGHT 
     } 

     let appDelegate : AppDelegate = NSApplication.shared().delegate as! AppDelegate 
     appDelegate.popover.contentSize = NSSize(width: FIXED_WIDTH, height: newY) 

    }