অন্য যে কেউ কাস্টিকের পরামর্শ অনুযায়ী কোর গ্রাফিক্স ব্যবহার করে কীভাবে একটি অভ্যন্তরীণ ছায়া আঁকবেন তা ভাবছেন, তারপরে এটি: (আইওএসে প্রয়োজন অনুসারে সামঞ্জস্য করুন)
আপনার ড্রয়ারেক্টে: পদ্ধতি ...
CGRect bounds = [self bounds];
CGContextRef context = UIGraphicsGetCurrentContext();
CGFloat radius = 0.5f * CGRectGetHeight(bounds);
CGMutablePathRef visiblePath = CGPathCreateMutable();
CGRect innerRect = CGRectInset(bounds, radius, radius);
CGPathMoveToPoint(visiblePath, NULL, innerRect.origin.x, bounds.origin.y);
CGPathAddLineToPoint(visiblePath, NULL, innerRect.origin.x + innerRect.size.width, bounds.origin.y);
CGPathAddArcToPoint(visiblePath, NULL, bounds.origin.x + bounds.size.width, bounds.origin.y, bounds.origin.x + bounds.size.width, innerRect.origin.y, radius);
CGPathAddLineToPoint(visiblePath, NULL, bounds.origin.x + bounds.size.width, innerRect.origin.y + innerRect.size.height);
CGPathAddArcToPoint(visiblePath, NULL, bounds.origin.x + bounds.size.width, bounds.origin.y + bounds.size.height, innerRect.origin.x + innerRect.size.width, bounds.origin.y + bounds.size.height, radius);
CGPathAddLineToPoint(visiblePath, NULL, innerRect.origin.x, bounds.origin.y + bounds.size.height);
CGPathAddArcToPoint(visiblePath, NULL, bounds.origin.x, bounds.origin.y + bounds.size.height, bounds.origin.x, innerRect.origin.y + innerRect.size.height, radius);
CGPathAddLineToPoint(visiblePath, NULL, bounds.origin.x, innerRect.origin.y);
CGPathAddArcToPoint(visiblePath, NULL, bounds.origin.x, bounds.origin.y, innerRect.origin.x, bounds.origin.y, radius);
CGPathCloseSubpath(visiblePath);
UIColor *aColor = [UIColor redColor];
[aColor setFill];
CGContextAddPath(context, visiblePath);
CGContextFillPath(context);
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddRect(path, NULL, CGRectInset(bounds, -42, -42));
CGPathAddPath(path, NULL, visiblePath);
CGPathCloseSubpath(path);
CGContextAddPath(context, visiblePath);
CGContextClip(context);
aColor = [UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:0.5f];
CGContextSaveGState(context);
CGContextSetShadowWithColor(context, CGSizeMake(0.0f, 1.0f), 3.0f, [aColor CGColor]);
[aColor setFill];
CGContextSaveGState(context);
CGContextAddPath(context, path);
CGContextEOFillPath(context);
CGPathRelease(path);
CGPathRelease(visiblePath);
সুতরাং, মূলত নিম্নলিখিত পদক্ষেপগুলি রয়েছে:
- আপনার পথ তৈরি করুন
- আপনার পছন্দ পূরণের রঙটি সেট করুন, প্রসঙ্গটিতে এই পথটি যুক্ত করুন এবং প্রসঙ্গটি পূরণ করুন
- এখন একটি বৃহত আয়তক্ষেত্র তৈরি করুন যা দৃশ্যমান পথকে আবদ্ধ করতে পারে। এই পথটি বন্ধ করার আগে দৃশ্যমান পথটি যুক্ত করুন। তারপরে পথটি বন্ধ করুন, যাতে আপনি দৃশ্যমান পথটি এটি থেকে বিয়োগ করে একটি আকার তৈরি করেন। আপনি এই পাথগুলি কীভাবে তৈরি করেছেন তার উপর নির্ভর করে আপনি ভরাট পদ্ধতিগুলি (এমনকি / বিজোড়ের শূন্যহীন ঘুর) তদন্ত করতে চাইতে পারেন। সংক্ষেপে, সাবপ্যাথগুলি "বিয়োগ" করার জন্য যখন আপনি তাদের একসাথে যুক্ত করেন, আপনাকে তাদের আঁকতে হবে (বা বরং এটি নির্মাণ করুন) বিপরীত দিকে, একটি ঘড়ির কাঁটা এবং অন্যটি ঘড়ির কাঁটার দিকের দিকে।
- তারপরে আপনার প্রেক্ষাপটে ক্লিপিংয়ের পথ হিসাবে আপনার দৃশ্যমান পথটি সেট করা দরকার, যাতে আপনি এর বাইরে কোনও কিছু স্ক্রিনে আঁকেন না।
- তারপরে প্রসঙ্গে ছায়া সেটআপ করুন, এতে অফসেট, অস্পষ্টতা এবং রঙ অন্তর্ভুক্ত রয়েছে।
- তারপরে এটির গর্ত দিয়ে বড় আকারটি পূরণ করুন। রঙ কোনও বিষয় নয়, কারণ আপনি যদি সবকিছু ঠিকঠাক করেন তবে আপনি এই রঙটি দেখতে পাবেন না, কেবল ছায়া।