سؤال

أنا أستخدم cashapelayer مع مسار. الآن أريد أن يرمي ظلًا ناعمًا بحوالي 10 وحدات من السماكة.

أولاً: نعم ، يمكنني إنشاء 11 كائنًا كافيًا فقط ، وفي كل مرة زيادة المخطط التفصيلي للمسار بوحدة واحدة بلون مختلف وبعض ألفا أكثر على كل تكرار. لكن بهذه الطريقة أقوم بتفجير بصمة الذاكرة لأن الشيء هو نصف حجم الشاشة وهذا يعني أن يكون لديه 11x 1x من حجم الشاشة نصف في الذاكرة.

لذلك نظرًا لأن iPhone OS 3.2 يمكنني استخدام خصائص الظل الأنيقة على Calayer. لكني أريد التمسك بنظام التشغيل 3.0. إذن ما هي الخيارات التي لدي ، بخلاف الخيار المذكور أعلاه؟

هل كانت مفيدة؟

المحلول

يمكنك إنشاء الظل باستخدام الرسومات الأساسية. يتم وصف اللبنات الأساسية التي ستحتاج إليها Quartzdemo عينة. على وجه الخصوص إلقاء نظرة على class QuartzMaskingView في Quartzclipping.M.

  1. التقاط محتوى طبقة الشكل إلى الصورة
  2. اضبط الظل حسب رغبتك
  3. ابدأ طبقة الشفافية
  4. مقطع إلى صورة محتوى الطبقات - سوف ترسم خارجها
  5. ارسم صورتك مرة أخرى

يؤدي هذا إلى رسم الظل خارج منطقتك المقنعة.

CGSize size = CGSizeMake(300, 100);

UIGraphicsBeginImageContextWithOptions(size,NO, 0.0);
[shapeLayer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

CGRect flippedImageRect = 
    CGRectMake(0, 0, image.size.width, -image.size.height);

CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSaveGState(ctx);
CGContextSetShadowWithColor(ctx, CGSizeMake(4, 4), 2, 
    [[UIColor colorWithWhite:0 alpha:0.4] CGColor]);
CGContextBeginTransparencyLayer(ctx, NULL);
CGContextScaleCTM(ctx, 1.0, -1.0);
CGContextClipToMask(ctx, flippedImageRect, [image CGImage]);   
CGContextSetFillColorWithColor(ctx, [[UIColor redColor] CGColor]); 
CGContextDrawImage(ctx, flippedImageRect, [image CGImage]);
CGContextEndTransparencyLayer(ctx);
CGContextRestoreGState(ctx);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top