2011-12-31 23 views
5

मेरे पास इंटरफ़ेस (स्टेटस बार के नीचे) के शीर्ष पर एक यूवीव है जो केवल इसका निचला हिस्सा दिखाया गया है।एक दृश्य को स्पर्श करें और खींचें

वास्तव में, मैं इस तरह के मूल iOS में notificationcenter और नहीं बस एक बटन टैप करके के रूप में नीचे स्लाइड करने के लिए लाल UIView बनाने के लिए पूरी तरह से खींचें तथा दिखाने के लिए चाहते हैं।

मैं करने के लिए क्या उपयोग UIView "स्पर्श करके उसे नीचे खींच" करना होगा कि वह पूरी तरह से दिखाया जा सकता है?

Example

उत्तर

3

UIView का एक उपवर्ग करें।

अवहेलना touchesBegan:withEvent और touchesMoved:withEvent। तो उपयोगकर्ता जानता वे दृश्य को छू रहे हैं

touchesBegan में शायद एक दृश्य परिवर्तन करें। touchesMoved में [[touches anyObject] locationInView:self] और [[touches anyObject] previousLocationInView:self]

का उपयोग वर्तमान स्पर्श स्थिति और अंतिम स्पर्श स्थिति (खींचें नीचे का पता लगाने या वापस ऊपर खींचें) के बीच अंतर की गणना करने के।

फिर यदि आप कस्टम ड्राइंग कर रहे हैं, तो [self setNeedsDisplay] पर कॉल करें ताकि आपके दृश्य को drawRect:(CGRect)rect विधि में फिर से निकालने के लिए कहा जा सके।

नोट: इस मान लिया गया है कई स्पर्श इस दृश्य द्वारा नहीं किया जाता।

1

तुम बस TouchesBegin और TouchesEnded तरीकों का उपयोग करने की आवश्यकता है iPhone App: implementation of Drag and drop images in UIView

में मेरा उत्तर का संदर्भ लें। उस उदाहरण में, मैंने दिखाया है कि CGPoint का उपयोग कैसे करें, इसके बजाय आपको अपने दृश्य के लिए setFrame या drawRect का उपयोग करने का प्रयास करना होगा।

जैसे ही TouchesMoved विधि कहा जाता है आप भी CGPoint से ऊंचाई ले setFrame या drawRect उपयोग करने के लिए (यकीन नहीं है, लेकिन कभी काम करता है जो, ज्यादातर setFrame)।

+0

विल - (शून्य) पैन: (यूआईपीएनजेस्टर रिकॉग्नाइज़र *) इशारा नौकरी बनाते हैं? – Alby

+1

हां, लेकिन फिर इसे उपयोग करते समय आपको और सावधान रहना होगा ...क्योंकि आपको उचित नियंत्रण और अन्य सामान को परिभाषित करने की आवश्यकता है ... यह भी अच्छा है ... लेकिन यदि आप टॉचबेबिन और टच्सएन्डेड का उपयोग कर रहे हैं ... तो आप इंटरफ़ेस बिल्डर में आईबीओटलेट्स दे सकते हैं ... – DShah

9

नहीं खींचें-एन-बूंद के एक समाधान खोजने के लिए की जरूरत है। एक UIScrollView स्पर्श पर सुनकर लाए गए किसी भी प्रदर्शन हानि के बिना ऐसा कर सकता है।

pulldown

@interface PulldownView : UIScrollView 

@end 

@implementation PulldownView 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (!self) { 
     return self; 
    } 
    self.pagingEnabled = YES; 
    self.bounces = NO; 
    self.showsVerticalScrollIndicator = NO; 
    [self setBackgroundColor:[UIColor clearColor]]; 
    double pixelsOutside = 20;// How many pixels left outside. 
    self.contentSize = CGSizeMake(320, frame.size.height * 2 - pixelsOutside); 
    // redArea is the draggable area in red. 
    UIView *redArea = [[UIView alloc] initWithFrame:frame]; 
    redArea.backgroundColor = [UIColor redColor]; 
    [self addSubview:redArea]; 
    return self; 
} 

// What this method does is to make sure that the user can only drag the view from inside the area in red. 
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event 
{ 
    if (point.y > height) 
    { 
     // Leaving useless touches to the views under it. 
     return nil; 
    } 
    return [super hitTest:point withEvent:event]; 
} 

@end 

उपयोग कैसे करें:
1. PulldownView का एक उदाहरण प्रमाणित करें।
2. किसी भी सामग्री को आप [addSubview:] का उपयोग करके उदाहरण में प्रदर्शित करना चाहते हैं।
3. लाल रंग को क्षेत्र में छुपाएं।

[pulldownView setContentOffset:CGPointMake(0, heightOfTheView - pixelsOutside)]; 

यह एक साधारण उदाहरण है। आप इसमें कोई विशेषताओं को जोड़ सकते हैं जैसे क्लिक-एन-ड्रॉप लागू करने के लिए ड्रैगगेबल क्षेत्र के नीचे एक शीर्षक बटन बार जोड़ना, या कॉलर द्वारा इसे स्थानांतरित करने के लिए इंटरफ़ेस में कुछ विधि जोड़ना।

+0

यह शानदार है, बिल्कुल मुझे चाहिए था। धन्यवाद! – bcattle

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