मैंने इस उत्तर का उपयोग किया कि मैं iPhone पर एक गोल कोने वाला UILabel कैसे बनाऊं? और कैसे iPhone से किया पारदर्शिता के साथ एक गोल परिभाषा दृश्य है से कोड ?इस कोड को बनाने के लिए।
तब मैंने महसूस किया कि मैंने गलत प्रश्न का उत्तर दिया (UIImage के बजाय एक गोल यूआईबेल दिया) इसलिए मैंने इस कोड का उपयोग परिवर्तन करने के लिए किया है:
http://discussions.apple.com/thread.jspa?threadID=1683876
व्यू टेम्प्लेट के साथ iPhone प्रोजेक्ट बनाएं। दृश्य नियंत्रक में, इसे जोड़ें:
- (void)viewDidLoad
{
CGRect rect = CGRectMake(10, 10, 200, 100);
MyView *myView = [[MyView alloc] initWithFrame:rect];
[self.view addSubview:myView];
[super viewDidLoad];
}
MyView
सिर्फ एक UIImageView
उपवर्ग है:
@interface MyView : UIImageView
{
}
मैंने पहले कभी ग्राफिक्स संदर्भों का उपयोग नहीं किया था, लेकिन मैं इस कोड को एक साथ रखने में कामयाब रहा। यह कोनों में से दो के लिए कोड गायब है। यदि आप कोड पढ़ते हैं, तो आप देख सकते हैं कि मैंने इसे कैसे लागू किया (कुछ CGContextAddArc
कॉल हटाकर, और कोड में कुछ त्रिज्या मानों को हटाकर। सभी कोनों के लिए कोड है, इसलिए इसे शुरुआती बिंदु के रूप में उपयोग करें और हटाएं। वे हिस्से जो आपके लिए आवश्यक कोनों को बनाते हैं। ध्यान दें कि आप चाहे तो 2 या 3 गोल कोनों से भी आयताकार बना सकते हैं।
कोड सही नहीं है, लेकिन मुझे यकीन है कि आप इसे थोड़ा छोटा कर सकते हैं।
static void addRoundedRectToPath(CGContextRef context, CGRect rect, float radius, int roundedCornerPosition)
{
// all corners rounded
// CGContextMoveToPoint(context, rect.origin.x, rect.origin.y + radius);
// CGContextAddLineToPoint(context, rect.origin.x, rect.origin.y + rect.size.height - radius);
// CGContextAddArc(context, rect.origin.x + radius, rect.origin.y + rect.size.height - radius,
// radius, M_PI / 4, M_PI / 2, 1);
// CGContextAddLineToPoint(context, rect.origin.x + rect.size.width - radius,
// rect.origin.y + rect.size.height);
// CGContextAddArc(context, rect.origin.x + rect.size.width - radius,
// rect.origin.y + rect.size.height - radius, radius, M_PI / 2, 0.0f, 1);
// CGContextAddLineToPoint(context, rect.origin.x + rect.size.width, rect.origin.y + radius);
// CGContextAddArc(context, rect.origin.x + rect.size.width - radius, rect.origin.y + radius,
// radius, 0.0f, -M_PI / 2, 1);
// CGContextAddLineToPoint(context, rect.origin.x + radius, rect.origin.y);
// CGContextAddArc(context, rect.origin.x + radius, rect.origin.y + radius, radius,
// -M_PI / 2, M_PI, 1);
// top left
if (roundedCornerPosition == 1) {
CGContextMoveToPoint(context, rect.origin.x, rect.origin.y + radius);
CGContextAddLineToPoint(context, rect.origin.x, rect.origin.y + rect.size.height - radius);
CGContextAddArc(context, rect.origin.x + radius, rect.origin.y + rect.size.height - radius,
radius, M_PI / 4, M_PI / 2, 1);
CGContextAddLineToPoint(context, rect.origin.x + rect.size.width,
rect.origin.y + rect.size.height);
CGContextAddLineToPoint(context, rect.origin.x + rect.size.width, rect.origin.y);
CGContextAddLineToPoint(context, rect.origin.x, rect.origin.y);
}
// bottom left
if (roundedCornerPosition == 2) {
CGContextMoveToPoint(context, rect.origin.x, rect.origin.y);
CGContextAddLineToPoint(context, rect.origin.x, rect.origin.y + rect.size.height);
CGContextAddLineToPoint(context, rect.origin.x + rect.size.width,
rect.origin.y + rect.size.height);
CGContextAddLineToPoint(context, rect.origin.x + rect.size.width, rect.origin.y);
CGContextAddLineToPoint(context, rect.origin.x + radius, rect.origin.y);
CGContextAddArc(context, rect.origin.x + radius, rect.origin.y + radius, radius,
-M_PI / 2, M_PI, 1);
}
// add the other corners here
CGContextClosePath(context);
CGContextRestoreGState(context);
}
-(UIImage *)setImage
{
UIImage *img = [UIImage imageNamed:@"my_image.png"];
int w = img.size.width;
int h = img.size.height;
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(NULL, w, h, 8, 4 * w, colorSpace, kCGImageAlphaPremultipliedFirst);
CGContextBeginPath(context);
CGRect rect = CGRectMake(0, 0, w, h);
addRoundedRectToPath(context, rect, 50, 1);
CGContextClosePath(context);
CGContextClip(context);
CGContextDrawImage(context, rect, img.CGImage);
CGImageRef imageMasked = CGBitmapContextCreateImage(context);
CGContextRelease(context);
CGColorSpaceRelease(colorSpace);
[img release];
return [UIImage imageWithCGImage:imageMasked];
}
alt text http://nevan.net/skitch/skitched-20100224-092237.png
यह मत भूलो कि काम करने के लिए आपको क्वार्ट्जकोर रूपरेखा प्राप्त करने की आवश्यकता होगी।