سؤال

وأنا أحاول لتنفيذ بعض خط بسيط جدا رسم الرسوم المتحركة لبلدي التطبيق فون. وأود أن رسم مستطيل على وجهة نظري بعد تأخير. أنا باستخدام performSelector لتشغيل لي طريقة الرسم.

-(void) drawRowAndColumn: (id) rowAndColumn
{
    int rc = [rowAndColumn intValue];
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(context, 2.0);
    CGContextSetStrokeColorWithColor(context, currentColor.CGColor);
    CGRect rect = CGRectMake(rc * 100, 100, 100, 100);
    CGContextAddRect(context, rect);
    CGContextDrawPath(context, kCGPathFillStroke);

}

ما ثم يتم استدعاؤه عن طريق:

int col = 10;
[self performSelector:@selector(drawRowAndColumn:) 
           withObject:[NSNumber numberWithInt:col]
           afterDelay:0.2];

ولكن يبدو أنه عندما يتم إرسال رسالة drawRowAndColumn: في الواقع، لم يعد لديه حق الوصول إلى CGContextRef صالحة، وأنا على أخطاء مثل:

<Error>: CGContextAddRect: invalid context

إذا كنت محل performSelector مع دعوة مباشرة إلى drawRowAndColumn، أنه يعمل بشكل جيد. لذلك كان أول فكرتي لتمرير أيضا في CGContextRef عبر performSelector، لكنني لا يمكن أن يبدو لمعرفة كيفية تمرير الوسائط المتعددة في نفس الوقت (وهذا سؤال جيد آخر).

ما هو الخطأ في رمز أعلاه؟

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

المحلول

وأنت لا يمكن أن مجرد رسم في أي وقت من هذا القبيل. تحتاج إلى تنفيذ أسلوب drawRect: من UIView ووضع التعليمات البرمجية الرسم في هناك. للحصول على drawRect: لاطلاق النار تحتاج إلى السماح الكاكاو تعرف أن وجهة النظر يحتاج إلى الانتباه. لذلك يمكنك الاتصال setNeedsDisplay، أو setNeedsDisplayInRect:.

وترجمة مباشرة محاولتك هذه الطريقة التي كنت أدعو setNeedsDisplay باستخدام performSelector: withObject: afterDelay - ولكن هذا ربما لا يكون وسيلة جيدة للقيام الرسوم المتحركة

.

وهذا يعتمد ما كنت أحاول حقا القيام به - ولكن هل يمكن النظر، على سبيل المثال، وضع كود الرسم في drawRect كما اقترحت، ولكن بدء عرض مخفي. هل يمكن أن ثم استدعاء setHidden: NO باستخدام performSelector لجعله يبدو بعد تأخير - أو هل يمكن أن يديروا على نحو سلس في خلال البدء لا يخفى، ولكن مع ألفا من 0، ثم تغيير ألفا إلى 1 داخل كتلة UIView الرسوم المتحركة (هناك الكثير حول هذا في مستندات).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top