2012-07-02 7 views
7

पर रीसेट करता है क्यों मैं कर्सर को अपने माउस ड्रैग की अवधि के लिए नहीं रख सकता? जैसे ही मैं खींचना शुरू करता हूं, यह "तीर" पर वापस जाता है (भले ही मैं इसे लॉन्च के बाद ऐप प्रतिनिधि में खुले हाथ के रूप में सेट करता हूं)।एनएससीसर हमेशा एरो

- (void)mouseDown:(NSEvent *)event 
{ 
    [[NSCursor closedHandCursor] push]; 
} 

- (void)mouseUp:(NSEvent *)event 
{ 
    [NSCursor pop]; 
} 

उत्तर

10

कर्सर सेट करने के लिए addCursorRect:cursor: का उपयोग करने का प्रयास करें।

अपने दृश्य के लिए resetCursorRects ओवरराइड:

- (void)resetCursorRects 
{ 
    [super resetCursorRects]; 
    if(drag) { 
     [self addCursorRect:self.bounds cursor:[NSCursor closedHandCursor]]; 
    } 
} 

आप invalidateCursorRectsForView: कॉल करने के लिए अपने कर्सर rects अद्यतन के लिए मजबूर करने की जरूरत है:

[self.window invalidateCursorRectsForView:self]; 

लेकिन आप आप के बाहर आप देखने अलग कर्सर करना चाहते हैं, तो [[NSCursor closedHandCursor] set] को अपने mouseDragged: विधि में कॉल कर सकते हैं।

+0

ओह! मैंने ऐसा कुछ देखा लेकिन यह कुछ * * * के लिए * रीसेट * ओवरराइड करने के लिए मूर्खतापूर्ण लग रहा था। अब मैं समझता हूं कि जब मैं दृश्य की स्थिति बदलता हूं तो कर्सर आयता अमान्य हो जाता है! धन्यवाद। – borrrden

+2

addursursRect जोड़ने का तर्क '[स्वयं सीमा]' है, न कि '[स्वयं फ्रेम] '। – alecail

14

आप जबकि खींच आप -mouseDown में कर सकते हैं अन्य विचारों के लिए अपने कर्सर को बदलने के लिए नहीं करना चाहते हैं:

[[self window] disableCursorRects]; 

और -mouseUp में:

[[self window] enableCursorRects]; 
[[self window] resetCursorRects]; 
+3

यदि आप इसके लिए जाते हैं, तो सुनिश्चित करें कि माउसअप वास्तविक के लिए ट्रिगर हो गया है। एनएसटीबल व्यू और अन्य प्रकार के विचारों में भी, यदि आप माउसडाउन में बेस कॉल करते हैं, तो माउसअप अब ट्रिगर नहीं होता है, क्योंकि अंतर्निहित तंत्र चोरी करता है और घटना को "खपत" करता है। माउस में प्रवेश/निकाला गया इसका उपयोग भी एक अच्छा समाधान हो सकता है –

संबंधित मुद्दे