سؤال

أواجه مشكلة في صنع مستطيل قابل للوفق لاقتصاص صوري. أحاول تحقيق شيء مثل هذه الصورة:

http://img192.imageshack.us/img192/8930/customcropbox.jpg

حسنًا ، المشكلة الوحيدة هي أنه ليس لدي أدنى فكرة عن مكان البدء بالفعل. أحتاج إلى بعض النصائح حول كيفية تحقيق هذا التأثير من المحاصيل. ما الوثائق التي يجب أن أقرأها؟ الرسومات الأساسية أو الكوارتز 2D؟ كلاهما؟ لقد تم ترميز iPhone لأن تاريخ الإصدار الخاص به ، لكنني لم أستخدم أبدًا الرسومات الأساسية وما إلى ذلك. أي مساعدة أو نصيحة ستكون موضع تقدير كبير. سأرمي الكود الخاص بي هنا وأنا أتقدم لإظهار كيف يتم ذلك عندما أحقق ذلك. :-) أيضًا ، يتم تحريك هذا المربع المستطيل عبر الشاشة في عرض UiimageView الذي يجعله أكثر إثارة للاهتمام. شكرا للمساعدة وأتطلع إلى تحقيق هذا الهدف.

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

المحلول

إشارة مرجعية بلدي سؤال وهو نفسه بالضبط.

لقد وصلت إلى أبعد من التنقل حول عرض المحاصيل الخاص بي وإظهار جزء من الصورة بشكل صحيح ، ولكن التعامل مع عملية التكبير Scrollview هو عمل مستمر. في الوقت الحالي ، لدي صورة واضحة وطبقة UIVIEW في UIScrollView ، ثم خارج Scrollview وفي مستوى أعلى ، فإن بلدي المحصور المخصص UIVIEW. أقوم بتنفيذ طرق اللمسات للتعامل مع سحبها ، وكذلك السحب:

- (void)drawRect:(CGRect)rect {
    // Drawing code
    if( self.image == nil )
        return;

    CGPoint offset = scrollView.contentOffset;
    clipRect = CGRectOffset(self.frame, offset.x, offset.y);

    UIImage *croppedImage = [image croppedImage:clipRect];
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    [croppedImage drawAtPoint:CGPointMake(0, 0)];
}

ملاحظة: إن عرض زراعة المحاصيل الخاص بي ليس من نسل UiimageView ، إنه مجرد Uiview مع إشارة إلى الصورة الأساسية من العرض الآخر.

"CroppledImage" هي فئة على Uiimage وبسيطة جدًا:

@implementation UIImage (Resize)
- (UIImage *)croppedImage:(CGRect)bounds {
    CGImageRef imageRef = CGImageCreateWithImageInRect([self CGImage], bounds);
    UIImage *croppedImage = [UIImage imageWithCGImage:imageRef];
    CGImageRelease(imageRef);
    return croppedImage;
}
...
@end

لقد قمت بتنفيذ عدد قليل من أساليب UisCrollViewDelegate وأمر عبر نشاط التمرير حتى أتمكن من الحفاظ على عرض زراعة المحاصيل في المزامنة. يتم تمرير التكبير أيضًا ، ولكن كما ذكرنا ، لا يعمل حسب الرغبة بعد.

ملاحظة أخرى: لا أعتقد أنه من الضروري أن نضيع الوقت في توليد واجهة جديدة مع المنطقة التي تم اقتصاصها في كل مرة يجب أن تكون فيها ذلك ممكنًا

CGImageRef imageRef = CGImageCreateWithImageInRect([yourImage CGImage], bounds);
and 
CGContextDrawImage(ctx, clipRect, imageRef);

نصائح أخرى

الكوارتز هو "مصطلح التسويق" للرسومات الأساسية ، وهذا هو المكان الذي يجب أن تبدأ فيه. ستحتاج إلى استخدام UIVIEW (رسم مخصص كامل في -drawRect :) ، فخ وتتبع لمسه ، ثم ارسم النتيجة. يمكنك الحصول على سياق الرسومات الحالي باستخدام UigraphicSgetCurrentContext (). يجب أن يكون كافيا للحصول على انك بدأته!

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