2011-01-24 14 views
8

में एक रेखा खींचना जब मैं लाइन खींच सकता हूं तो मैं एक ऐप विकसित करना चाहता हूं ... लेकिन मैं सीधे लाइनों को आकर्षित नहीं करना चाहता हूं लेकिन उपयोगकर्ताओं को आकर्षित करने के रूप में लाइन दिखाना चाहता हूं। जब उपयोगकर्ता बिंदु ए से बी तक जाता है तो मैं लाइन को सीधा करना चाहता हूं (यदि उपयोगकर्ता इसे चाहते हैं)।आईफोन/आईपैड

ऐसा करने में सक्षम होने के लिए मैं अपना दृश्य 0,0 (शीर्ष बाएं) से शुरू होने और ग्रिड में 320,480 (आईफोन के लिए) और 768,1024 (आईपैड के लिए) (नीचे दाएं) से शुरू करना चाहता हूं।

इस प्रश्न के लिए मेरे पास बिंदु 10 है, और बिंदु बी 100,100 पर है।

मेरा प्रश्न:
- मैं इस ग्रिड को कैसे बना सकता हूं?
- मैं इन बिंदुओं को कैसे बना सकता हूं?
- मैं इसे बिना सीधे किए इस लाइन को कैसे आकर्षित करूं?
- मैं सीधी रेखा कैसे आकर्षित करूं?

मेरी समस्या यह है कि मैं "सामान्य" यूआई ऐप्स बनाने से परिचित हूं। मैं ओपन-जीएल ect से परिचित नहीं हूँ।

मुझे उम्मीद है कि कोई मेरी मदद कर सकता है।

सादर,
पॉल Peelen

+0

मैं आपकी "सीधी" समस्या को एक अलग प्रश्न में तोड़ने की सलाह देता हूं। – genpfault

+0

ठीक है, आपका मतलब है कि मैं चरण 1 के रूप में सीधे लाइनों के साथ शुरू करता हूं, और बाद में चरण 2 में गैर-सीधी रेखाओं पर जाता हूं? –

+0

आपने इसे 'opengl-es' के रूप में टैग किया है - क्या आप इसके साथ अपना चित्र कर रहे हैं, या "देशी" ड्राइंग सिस्टम, क्वार्ट्ज के साथ? –

उत्तर

17

आप अपने UIView उपवर्ग और - (void)drawRect:(CGRect)rect विधि ओवरराइड।

वहाँ में आप एक ग्राफिक्स संदर्भ हड़पने:

CGContextRef context = UIGraphicsGetCurrentContext(); 

और आपको लगता है कि बनाने के लिए उपयोग मुख्य ग्राफ़िक्स, कॉल की तरह:

CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextBeginPath (context); 
for (k = 0; k < count; k += 2) { 
    CGContextMoveToPoint(context, s[k].x, s[k].y); 
    CGContextAddLineToPoint(context, s[k+1].x, s[k+1].y); 
} 
CGContextStrokePath(context); 

सभी विवरण के लिए क्वार्ट्ज 2 डी प्रोग्रामिंग मार्गदर्शिका देखें।

+0

बहुत बढ़िया, मुझे एक नज़र आएगी। –

+0

मैं एक ही चीज़ के साथ शुरू कर रहा हूं, कोई उदाहरण या ट्यूटोरियल ... इस कोड का उपयोग कैसे करें इसका पता नहीं लगा सकता .. किसी भी मदद की सराहना की गई धन्यवाद – Dave

+0

कोई भी मुझे उपरोक्त कोड का उपयोग करने में मदद करता है? –

0

आप सीधी रेखा खींच सकते हैं जब उपयोगकर्ता खींचें यह शुरू करने और अंत बिंदु एक पंक्ति UIBezierPath और CAShapeLayer का उपयोग कर आकर्षित के आधार पर:

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [[event allTouches] anyObject]; 
    startingPoint = [touch locationInView:baseHolderView]; 

} 
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 
    endingPoint = [touch locationInView:baseHolderView]; 
    [self makeLineLayer:baseHolderView.layer lineFromPointA:startingPoint toPointB:endingPoint]; 
} 

-(void)makeLineLayer:(CALayer *)layer lineFromPointA:(CGPoint)pointA toPointB:(CGPoint)pointB 
{ 
    CAShapeLayer *line = [CAShapeLayer layer]; 
    UIBezierPath *linePath=[UIBezierPath bezierPath]; 
    [linePath moveToPoint: pointA]; 
    [linePath addLineToPoint:pointB]; 
    line.path=linePath.CGPath; 
    line.fillColor = nil; 
    line.opacity = 2.0; 
    line.strokeColor = [UIColor blackColor].CGColor; 
    [layer addSublayer:line]; 
} 

आशा यह आपके लक्ष्य को प्राप्त करने में मदद मिलेगी।