2016-04-26 4 views
10

के साथ आईपैड प्रो पर एनोटेट टेबल व्यू मैं आईपैड प्रो के लिए एक ऐप बना रहा हूं जिसमें यूआईटीबल व्यू आइटम के साथ कैटलॉग दिखा रहा है। 1-हजार वस्तुओं वाले प्रत्येक में कई कैटलॉग हैं।पेंसिल

लक्ष्य

मैं पता लगाने के लिए करने के लिए (सर्वोत्तम) यह पेंसिल का उपयोग कर, ताकि उपयोगकर्ता उंगली से स्क्रॉल कर सकते हैं UITableView में सामान टिप्पणी करने के लिए संभव बनाने के लिए चाहते हैं। साथ ही, उपयोगकर्ता द्वारा खींचा गया डेटा डेटा मॉडल में जारी है।

मुझे बताएं कि मैंने क्या प्रयास किया है।

एकल UIView

मुझे लगता है कि touch.type == UITouchType.Stylus पर touchesBegan/Moved/Ended/Canceled कार्यों और फिल्टर ओवरराइड करता है पता करने के लिए जब यह उंगली है और जब यह पेंसिल है एक कस्टम UITableView की चोटी पर एक भी UIView डाल दिया। यह काम करता है लेकिन यह एक अच्छा समाधान नहीं है क्योंकि छवि बहुत बड़ी वस्तुओं के साथ कुछ कैटलॉग डालने के लिए भी बड़ी होगी और यहां तक ​​कि संभव नहीं है।

प्रति पंक्ति एक UIView

निर्माण अच्छी तरह से साथ एक बड़ी सूची है, लेकिन एक समस्या पंक्तियों जो संभव होना चाहिए भर में आकर्षित करने के लिए सक्षम नहीं होने के साथ आया था। मुझे अभी तक विभिन्न विचारों में इशारा रखने का कोई तरीका नहीं मिला। क्या यह संभव है या क्या कोई कामकाज है?

फिक्स्ड UIView स्क्रीन

पर और साथ समन्वय करता है के रूप में यह जारी रहती है अनुसरण करता है, जब स्क्रॉल कुछ भी भर में आकर्षित करने के लिए आसान है, लेकिन यह स्पष्ट नहीं है और मुश्किल मेज पर सामान तैयार ठीक करने के लिए। यह सही महसूस नहीं कर रहा था क्योंकि यह स्क्रीन के आकार के कैनवास का पालन करने के लिए अत्यधिक जटिल लग रहा था और जो कुछ भी खींचा गया है उसे यूआईएममेज व्यू में बदल दिया गया है, जो पंक्तियों के लिए फैलता है और वहां रहता है ... यह वह जगह है जहां मैं अब हूं और मैं दिखा सकता हूं कुछ कोड अगर यह दृष्टिकोण समझ में आता है।

क्या इसका कोई बेहतर दृष्टिकोण है क्योंकि ऐसा लगता है कि यह अब पेंसिल के साथ एक बहुत ही प्राकृतिक आवश्यकता होनी चाहिए, यानी तालिका दृश्य में एनोटेट और बने रहना चाहिए।

क्या किसी ने ऐसा कुछ किया है या क्या मैंने कुछ अनदेखा किया है? हो सकता है कि किसी प्रकार का स्पैस UIImageView ताकि मैं एक विशाल टेबल पर एक भी हो सकूं?

मैं समाधान में शामिल होने के आधार पर एक अच्छा समाधान और उदाहरण कोड ढूंढ रहा हूं।

धन्यवाद!

अद्यतन

तो स्पष्ट करने के लिए, तालिका के आइटम एक निश्चित तरीके से आदेश दिया जाता है तो एक का उपयोग कर सकते हैं कि आंशिक रूप में तैयार/एनोटेट सामान लागू करने के लिए।

आम तौर पर, चित्रों/एनोटेशन को 1 से एन छवियों के रूप में जारी रखा जा सकता है। एक छवि कई मामलों में बहुत बड़ी है क्योंकि आइटम हजारों हैं, एन छवियों का मतलब है कि एक सीमा है जहां एक इशारा बाधित होता है और यह प्रयोज्यता के लिए आदर्श नहीं है क्योंकि चित्र निरंतर नहीं है (जब तक कि यह हल करना संभव नहीं है महान हो)।

डेटा मॉडल कैटलॉग [-> पेज] -> आइटम हो सकता है लेकिन मैं पृष्ठ की अवधारणा नहीं लेना चाहता हूं क्योंकि (पृष्ठ का संक्षिप्त कारण) प्रति पृष्ठ छोटे आइटम बनाता है और पूरा बिंदु आइटम को अधिकतम करना है एनोटेट करना आसान है।

+0

क्या एक एनोटेशन तालिका दृश्य में एक आइटम से जुड़ा हुआ है? यदि तालिका में आइटमों के क्रम में परिवर्तनों का क्रम एनोटेशन नए आदेश का पालन करना चाहिए? –

+0

हाँ, बहुत अच्छा सवाल है। यह निश्चित रूप से इस विशिष्ट मामले से संबंधित है और आदेश तय किया गया है और नहीं बदलेगा। एनोटेशन को किसी विशिष्ट पंक्ति/वस्तु से कनेक्ट नहीं होना चाहिए, लेकिन अगर यह जारी रखने में मदद करता है (छोटी छवियों के विरुद्ध छोटी छवियां?) – murrekatt

+0

लेकिन बेशक, एनोटेशन आइटम/पंक्तियों से संबंधित हैं। अर्थात। आप उस विशिष्ट पंक्ति/वस्तु के लिए कुछ चिह्नित करते हैं या कुछ टिप्पणी करते हैं। इसके अलावा आप वस्तुओं की एक श्रृंखला को चिह्नित/एनोटेट करना चाहते हैं, इसलिए ड्राइंग/एनोटेशन को कई पंक्तियों/वस्तुओं का विस्तार करना चाहिए। – murrekatt

उत्तर

0

ठीक है, इसलिए कोई भी ऐसा नहीं करता है।

अब मैं प्रति पंक्ति एक ड्राइंग कैनवास के साथ काम कर रहा हूं जो एक छवि के रूप में भी बनी रहती है। इसके साथ मुख्य मुद्दा तालिका पंक्तियों में निरंतर और निर्बाध ड्राइंग बना रहा था।

तरह से मैंने किया था यह अपने कस्टम तालिका दृश्य कक्षा में hitTest उपयोग करने के लिए अंतिम रूप को पकड़ने के लिए किया गया था:

override func hitTest(point: CGPoint, withEvent event: UIEvent?) -> UIView? 
{ 
    if let result = super.hitTest(point, withEvent: event) { 
     if let sv = result.superview { 
      if sv.isKindOfClass(TableHeaderView) { 
       return result 
      } 
     } 
     return self 
    } 
    return nil 
} 

... और फिर touches* कार्यों मैं को निष्क्रिय में/स्क्रॉल अगर यह पेंसिल और फिर सक्षम खींचने और बने रहने के लिए इसी सेल में प्रतिनिधि।

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) 
{ 
    if let touch = touches.first { 
     if touch.type == UITouchType.Stylus { 
      scrollEnabled = false 

      let location = touch.locationInView(self) 
      // find underlying cell -> call drawTouches 
      for visibleCell in visibleCells { 
       if let cell = visibleCell { 
        if CGRectContainsPoint(cell.frame, location) { 
         cell.touchesBegan(touches, withEvent: event) 
         break 
        } 
       } 
      } 
     } 
    } 
} 

मुख्य विचार है कि इशारा जारी रखने के लिए तालिका दृश्य में समग्र नियंत्रण रखना है। इसे प्राप्त करने का दूसरा तरीका उस एकल स्क्रीन-फिक्स्ड ड्रा कैनवास और तालिका कक्षों में प्रतिनिधि के साथ होगा। मेरे मामले में स्क्रॉल करने की बात करने की बात यह है कि उंगली स्क्रॉल और पेंसिल ड्रा के लिए अनुमति दें। UIScrollView कि UITableView कैच जेस्चर से लिया गया है इसलिए किसी को टेबल व्यू क्लास में इशारा करने में देरी की आवश्यकता नहीं है।

delaysContentTouches = false 

बहुत अच्छी तरह से काम करता है, लेकिन यह सुनिश्चित नहीं है कि कोई अच्छा तरीका है तो कृपया टिप्पणी करें।

0

मुझे लगता है कि मैं इसके बारे में निम्न तरीके से जाऊंगा।

[draw layer] 
[annotation layer] 
[table view] 

नीचे की तालिका दृश्य के साथ तीन परतें। शीर्ष परत तय और ड्राइंग के लिए उपयोग किया जाता है। जैसे ही एक एनोटेशन तैयार किया गया है, इसे एनोटेशन लेयर में ले जाया जाएगा जो भी तय किया गया है।

जब ड्राइंग एनोटेशन परत यह tableview परतों में अनुवाद किया जाना चाहिए जैसे ही प्रणाली (सामग्री तालिका दृश्य में ऑफसेट + ड्रा परत में ऑफसेट)

समन्वय के रूप में tableview स्क्रॉल किया है एनोटेशन परतों समन्वय में ले जाया जाता सिस्टम का अनुवाद CGAffineTransform के साथ किया गया है जो सभी सबलायर्स को स्थानांतरित करेगा ताकि एनोटेशन टेबलव्यू के साथ 'स्क्रॉल' कर सकें। स्पष्टीकरण के लिए, एनोटेशन परत समन्वय प्रणाली हमेशा तालिकादृश्य की सामग्री ऑफसेट के साथ समन्वयित होनी चाहिए।

+0

धन्यवाद, लेकिन यह मुझे बताए गए सब कुछ को संबोधित नहीं कर रहा है। – murrekatt

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