看板 MacDev 關於我們 聯絡資訊
※ 引述《klern (灰)》之銘言: : 首先 先大概介紹我要做的程式 : 用一個NSImageView連結上相機的預覽視窗, 藉此可以看到相機的預覽畫面 這邊稍微有點看不太清楚,所謂相機上的預覽視窗,有可能是代表 把外接相機當做 webcam 錄進 video stream,也可能是把已經拍好的 照片讀進來,在 Cocoa 所提供的物件中,前者可以用 QTCaptureView, 後者可以用 IKCameraView,一個是 QuickTime 的東西,一個是 ImageKit 的東西,NSImageView 頂多就是載入 NSImage 而已…所以,這邊應 該是指,反正就是透過某種方法,讀到 NSImage 中,接著放到 NSImageView 裡頭。 : 另外 在drawRect畫上一個能夠拖曳以及調整尺寸的方格 來圈取想剪裁的部分 : 但是我遇到了問題... : 當我尚未開啟畫面預覽時(藉由按鈕觸發), 我的方格拖曳以及調整尺寸功能可以正常運作 : 而當我開啟畫面預覽時 當我拖曳或調整尺寸時 方格的位置都會跑掉 : 我拖曳及調整尺寸的功能是使用mousedown mouseup mousedrag這幾個method 聽起來應該是 drawRect: 的時候,在做影像上面重疊一個外框的地方 沒有處理好,這邊講得不太清楚,不知道是用 NSBezierPath 還是用 CoreGraphics 在畫。我可以想到的大概有兩點: 1. 在做了 mouseUp mouseDown 之後,是不是有確實要求你的 ImageView 重繪,是不是都有呼叫 setNeedsDisplay?會不會外框位置跑掉, 原因是並沒有 redraw 呢? 2. 如果不打算管 10.4 之前的版本,你要的 UI 可能會比較適合用 CoreAnimation 做,因為一直呼叫某個 NSView 重繪,老實說效能 不會很好。 如果是用 CoreAnimation,上方的裁切框,只要再加入一個 CALayer 就好,CALayer 的 interface 基本上跟 NSView 差不多,但是直接 就可以設定外框顏色與粗細,所以,如果我們把原本的 View 的 layer 的 content 設成那張圖片,裁切框設定成另外一個有外框的 layer, 那麼,要調整裁切框範圍,其實就只是設定這個 layer 的 frame 而已,比在 drawRect: 裡頭自己寫怎麼繪製內容好懂許多。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.42.194.204
klern:謝謝解答! 第一個部分是前者 在drawRect我使用NSBezierPath 08/14 21:47
klern:在使用mouse method時 有呼叫setNeedsDisplay 但不知為什麼 08/14 21:48
klern:拖曳後 放開滑鼠左鍵 方框會繼續移動 有點延遲(?)的狀況 08/14 21:49
klern:因為我這是要額外加在別的程式上的功能 所以要整個改成 08/14 21:50
klern:CoreAnimation做 有點不太方便 再度謝謝你!! 08/14 21:51
zonble:因為整個 view redraw 還頂慢的,建議打幾個 NSLog 上去 08/15 00:04
zonble:看看是不是mouseup之後,還在畫 mousedrag 的時候的東西 08/15 00:04
klern:謝謝 我在嘗試看看! 08/15 00:16
klern:目前嘗試了CALayer 利用Layer的frame做拖曳 但畫面會出現 08/18 09:57
klern:拖曳過的殘影 請問這有辦法解決嗎 謝謝 08/18 09:58
zonble:你是直接把 layer 疊在 image view 上嗎? 08/18 15:56
zonble:通常這樣會有問題,建議把圖片也放在另一個 CALayer 裡 08/18 15:56
klern:我列出我部分程式碼 CALayer *rootLayer = [CALayer layer]; 08/18 16:07
klern:rootLayer.contents = [self layer].contents; 08/18 16:07
klern:[[self layer] addSublayer:rootLayer]; 08/18 16:08
klern:rootLayer在addSubLayer:裁切Layer 08/18 16:09
zonble:http://drp.ly/1yHC9V 玩玩看 08/18 18:25
klern:謝謝:) 08/18 19:54