2017-02-04 39 views
0

在swift中,我加載了音頻/視頻url,但視圖不調整大小,如果url是本地文件;網址很好。wkwebview窗口更改通知後調整大小

我想縮放/增長/等視圖跟蹤窗口與保持原來的維度。我首先去找IB來添加一個視圖約束,但沒有快樂;該選項未啓用。通知處理程序 - -

於是我沿着這個線路思維ALA的Objective-C,調整大小時,窗口的變化:

// Listen for window resizes 
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(WebViewController.windowResized(_:)), name: NSWindowDidEndLiveResizeNotification, object: nil) 

var orig = CGSize(width: 0,height: 0) 
func windowResized(urlObject : NSNotification) { 
    let url = (self.webView.URL) 
    if ((url?.isFileReferenceURL()) != nil) { 
     let track0 = AVURLAsset(URL:url!, options:nil).tracks[0] 
     if track0.mediaType == AVMediaTypeVideo 
     { 
      orig = track0.naturalSize 
      print("original size ",orig) 
      let bounds = webView.window?.contentView!.bounds 
      webView.window?.setContentSize(orig) 
      webView.bounds.size = orig 
     } 
    } 
} 

這並不作爲新的邊界設置不起作用工作。好奇,通知NSWindowDidResizeNotification不可用?

所以也許我正在討論這個錯誤。

所以我問是否有更好的方法來處理大小更改事件,以影響webView的大小或計劃。

回答

0

WKWebView實際上是在您的應用程序的單獨窗口中運行的。因此,爲您的窗口收到通知將無法使用。

這篇文章可能希望引導你在正確的方向,以獲得正確的通知

How to detect a movie being played in a WKWebView?

+0

我的webView是一個伊維爾視圖控制器添加爲控制器視圖的子視圖。這是osx,但我很確定沒有另一個窗口實例,但感謝指針。沿着你的路線,雖然我走了子視圖,每個允許放大,但仍然沒有得到它的大小。 – slashlos

0

所以我改變了我原來加「webView.bounds.size =原稿」接着又說了修復與viewLayout ()。

override func viewDidLayout() { 
    super.viewDidLayout() 

    let newSize = webView.bounds.size 
    let aspect = orig.height/orig.width 
    let magnify = newSize.width/orig.width 
    let newHeight = newSize.width * aspect 
    let adjSize = NSMakeSize(newSize.width-1,newHeight-1) 

    webView.setMagnification(magnify, centeredAtPoint: NSMakePoint(adjSize.width/2.0, adjSize.height/2.0)) 
    view.bounds.size = adjSize 
} 

這但是也可以放大了控制,並使用相同的網頁視圖內的其它視頻導致佈局偏斜;我越來越近,但此修復程序有問題。使用round()和rint()不會使用舍入hack(h/w-1);而使用round()和rint()不會使用round()。我試圖避免滾動條。如果有辦法避免讓webkit控件放大等,請告訴我們,謝謝!