2011-05-31 15 views
8

मैं एक UIButton बनाने के लिए उस के साथ UIBackBarButtonItem के समान दिखता है (एक तीर की ओर इशारा करते के साथ नेविगेशन ढेर के लिए छोड़ दिया चाहते का उपयोग किए बिना कस्टम UIButton आकार। मैं अगर वजह से संभव एक छवि का उपयोग किए बिना ऐसा करने के लिए पसंद करेंगे बटन फ़ोन के अभिविन्यास आधार पर एक अलग आकार होगा।एक छवि

वहाँ सक्रिय करने के लिए एक तरह से इस कोड में प्रभावित करते है? मेरा विचार किसी भी तरह बटन के CALayer उपयोग कर रहा था।

धन्यवाद!

संपादित

मैं @ दीपक की सलाह का उपयोग करने की कोशिश कर रहा हूं, लेकिन मैं एक समस्या में भाग रहा हूं। मैं चाहता हूं कि बटन के दाहिने तरफ एक जैसा दिखें [UIBezierPath bezierPathWithRoundedRect: rect cornerRadius: 4] बाईं ओर एक तीर की तरह दिख रहा है। मैंने addQuadCurveToPoint: controlPoint विधि का उपयोग करके ऐसा करने का प्रयास किया।

मैं नियंत्रण बिंदु के रूप में रेक्ट के कोने का उपयोग कर रहा हूं, लेकिन पथ की अपेक्षा नहीं है जैसा कि मैं उम्मीद करता हूं। यह अभी भी कोनार्ड है जैसे कि मैंने केवल addLineToPoint: विधि का उपयोग किया था। मेरा कोड नीचे है।

float radius = 4.0; 
UIBezierPath *path = [UIBezierPath bezierPath]; 

CGPoint startPoint = CGPointMake(rect.size.width/5.0, 0); 
CGPoint pointBeforeTopCurve = CGPointMake(rect.size.width - radius, 0); 
CGPoint topRightCorner = CGPointMake(rect.size.width, 0); 
CGPoint pointAfterTopCurve = CGPointMake(rect.size.width, 0.0-radius); 

CGPoint pointBeforeBottomCurve = CGPointMake(rect.size.width, rect.size.height-radius); 
CGPoint bottomRightCorner = CGPointMake(rect.size.width, rect.size.height); 
CGPoint pointAfterBottomCurve = CGPointMake(rect.size.width - radius, rect.size.height); 

CGPoint pointBeforeArrow = CGPointMake(rect.size.width/5.0, rect.size.height); 
CGPoint arrowPoint = CGPointMake(0, rect.size.height/2.0); 


[path moveToPoint:pointBeforeTopCurve]; 
[path addQuadCurveToPoint:pointAfterTopCurve controlPoint:topRightCorner]; 

[path addLineToPoint:pointBeforeBottomCurve]; 
[path addQuadCurveToPoint:pointAfterBottomCurve controlPoint:bottomRightCorner]; 


[path addLineToPoint:pointBeforeArrow]; 
[path addLineToPoint:arrowPoint]; 
[path addLineToPoint:startPoint]; 
+0

चेक ड्राइंग कठिनाइयों का हल इस http://stackoverflow.com/questions/6184321/where-can-i-find-some-beautiful-iphone-buttons/6184393#6184393 – Jhaliya

+0

यह क्या हल किया? –

+0

आपका क्या मतलब है? –

उत्तर

7

आप इसे Quartz के साथ कर सकते हैं। आपको उपclass UIButton की आवश्यकता होगी और इसकी drawRect: विधि लागू करें। आपको पथ को परिभाषित करना होगा और इसे ढाल के साथ भरना होगा।

आपको hitTest:withEvent: को भी लागू करना होगा क्योंकि इसमें गैर-आयताकार आकार शामिल है।

0

इस के लिए मुझे

float radius = 10.0; 
UIBezierPath *path = [UIBezierPath bezierPath]; 

CGPoint startPoint = CGPointMake(rect.size.width/5.0, 0); 
CGPoint pointBeforeTopCurve = CGPointMake(rect.size.width - radius, 0); 
CGPoint topRightCorner = CGPointMake(rect.size.width, 0.0); 
CGPoint pointAfterTopCurve = CGPointMake(rect.size.width, radius); 

CGPoint pointBeforeBottomCurve = CGPointMake(rect.size.width, rect.size.height-radius); 
CGPoint bottomRightCorner = CGPointMake(rect.size.width, rect.size.height); 
CGPoint pointAfterBottomCurve = CGPointMake(rect.size.width - radius, rect.size.height); 

CGPoint pointBeforeArrow = CGPointMake(rect.size.width/5.0, rect.size.height); 
CGPoint arrowPoint = CGPointMake(0.0, rect.size.height/2.0); 


[path moveToPoint:pointBeforeTopCurve]; 
[path addQuadCurveToPoint:pointAfterTopCurve controlPoint:topRightCorner]; 

[path addLineToPoint:pointBeforeBottomCurve]; 
[path addQuadCurveToPoint:pointAfterBottomCurve controlPoint:bottomRightCorner]; 


[path addLineToPoint:pointBeforeArrow]; 
[path addLineToPoint:arrowPoint]; 
[path addLineToPoint:startPoint]; 


[path fill];