سؤال

أحاول تقديم طلب لأشكال رسم على الشاشة عن طريق لمسه.

يمكنني رسم خط من نقطة إلى أخرى، لكنه يمحو كل رسم جديد.

هنا هو رمزي:

CGPoint location;
CGContextRef context;
CGPoint drawAtPoint;
CGPoint lastPoint;
-(void)awakeFromNib{
    //[self addSubview:noteView];
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [[event allTouches] anyObject];
    location = [touch locationInView:touch.view];
    [self setNeedsDisplayInRect:CGRectMake(0, 0, 320, 480)];
}

- (void)drawRect:(CGRect)rect {
    context = UIGraphicsGetCurrentContext();
    [[UIColor blueColor] set];
    CGContextSetLineWidth(context,10);
    drawAtPoint.x =location.x;
    drawAtPoint.y =location.y;
    CGContextAddEllipseInRect(context,CGRectMake(drawAtPoint.x, drawAtPoint.y, 2, 2));
    CGContextAddLineToPoint(context,lastPoint.x, lastPoint.y);
    CGContextStrokePath(context);

    lastPoint.x =location.x;
    lastPoint.y =location.y;
}

نقدر مساعدتكم-

نير.

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

المحلول

كما اكتشفت، WrawRect هو المكان الذي تعرض فيه محتويات العرض. سوف ترى فقط على الشاشة ما ترسمه هنا.

هذا هو أكثر من مستوى منخفض بكثير من شيء مثل فلاش حيث يمكنك إضافة movieclip تحتوي على خط إلى المرحلة وبعض الوقت في وقت لاحق إضافة movieclip آخر يحتوي على سطر إلى المسرح والآن ترى - سطرين!

ستحتاج إلى القيام ببعض الأعمال وإعداد شيء مثل ..

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 

    UITouch *touch = [[event allTouches] anyObject]; 
    location = [touch locationInView:touch.view]; 

    [self addNewLineFrom:lastPoint to:location];

    lastPoint = location;

    [self setNeedsDisplayInRect:CGRectMake(0, 0, 320, 480)]; 
}

- (void)drawRect:(CGRect)rect {

    context = UIGraphicsGetCurrentContext();

    for( Line *eachLine in lineArray )
        [eachLine drawInContext:context];

}

أعتقد أنك تستطيع أن ترى كيفية اللحم على ما تحتاج إليه.

هناك طريقة أخرى للنهج هذا هو استخدام Calayers. باستخدام هذا النهج الذي لا تتخلى عنه من الداخل - - (الفراغ) رجال الانتشار على الإطلاق - يمكنك إضافة الطبقات وإزالتها، ورسم ما تريد بداخله، وسوف يتعامل العرض بتعامل معه معا والرسم على الشاشة حسب الحاجة. ربما أكثر ما تبحث عنه.

نصائح أخرى

في كل مرة drawRect يسمى، تبدأ بائحة فارغة. إذا كنت لا تتبع كل ما قمت بتوصيله من قبل من أجل رسمه مرة أخرى، فينتهي بك الأمر فقط برسم أحدث إصدار إصبعك، وليس أي من الأشخاص القدامى. سوف تضطر إلى تتبع جميع عمليات فحص إصبعك من أجل إعادة رسمها في كل مرة drawRect يسمى.

بدلا من إعادة رسم كل سطر، يمكنك رسم صورة ثم عرض الصورة في drawRect: طريقة. سوف تتراكم الصورة الخطوط لك. بالطبع، هذه الطريقة تجعل التراجع عن المزيد من الصعب تنفيذها.

من دليل برمجة تطبيق iPhone:

استخدم وظيفة UIGRAPHICSBEGINIMAGECONTEXT لإنشاء سياق رسومات جديد يستند إلى صورة. بعد إنشاء هذا السياق، يمكنك رسم محتويات صورتك فيها، ثم استخدم وظيفة UIGRAPHISSGETIMAGEFRINTIMAGECONTEXTEXTEX لتوليد صورة استنادا إلى ما لفتته. (إذا رغبت في ذلك، يمكنك حتى الاستمرار في رسم وإنشاء صور إضافية.) عند الانتهاء من إنشاء صور، استخدم وظيفة Uigraphicsendimagecontext لإغلاق سياق الرسوم. إذا كنت تفضل استخدام الرسومات الأساسية، فيمكنك استخدام وظيفة cgbitmapcontextreate لإنشاء سياق رسومات نقطية ورسم محتويات صورتك فيه. عند الانتهاء من الرسم، استخدم وظيفة CGBIBITMAPCONTEXTREATEIMAIMAIMAGE لإنشاء CGIMAGEREF من سياق الصورة النقطية. يمكنك رسم صورة الرسومات الأساسية مباشرة أو استخدم هذا لتهيئة كائن UIIMAGE.

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