drag-n-drop من Uipopovercontroller إلى uiview الآخر
-
01-10-2019 - |
سؤال
كيف يمكنني تنفيذ السحب وإسقاط UIVIEW من UIPopoverController
في الظهر UIView
.
هذه هي الوظيفة التي توفرها الصفحات في إدراج الوسائط الخاصة بهم ، حيث يمكنك سحب شكل من UIPopoverController
وإسقاطه في المستند الرئيسي.
أنا في حيرة من أمري مع المقلاة UIGestureRecognizers
وأين سيتم تنفيذها.
شكرًا،
Umer
المحلول
يجب عليك التعامل مع اثنين من وحدات التحكم في العرض واحدة في الخلفية التي تسمى MainController واحدة التي قدمت باستخدام أ UIPopoverViewController
يسمى popovercontroller. يمكن أن يضيف Popovercontroller الخاص بك UIPanGestureRecognizer
إلى طرق العرض ، يمكن للمستخدم السحب. يمكن أن يكون هدف الإجراء لـ GesturerEcognizer طريقة على Popovercontroller.
بمجرد أن يبدأ المستخدم عملية السحب ، يتم استدعاء طريقة الإجراء الخاصة بك مع GesturereCognizer كوسيطة ، كانت حالة GesturereCognizer UIGestureRecognizerStateBegan
. يمكنك من حفظ الإطار الحالي للعرض إلى حد ما لتكون قادرًا على تحريكه مرة أخرى ، عندما يفشل الانخفاض. قد يكون من الضروري نقل طريقة العرض إلى مراقبة أخرى (النافذة على سبيل المثال) ، لأنني لست متأكدًا مما إذا كان UipOpoverViewController ClipStobounds يعرض عرضه.
نظرًا لأن المستخدم DragGs ، يتم استدعاء طريقة الإجراء الخاصة بك مرارًا وتكرارًا مع GesturerEcognizer في الولاية UIGestureRecognizerStateChanged
. استخدم ال translationInView:
طريقة على UIPanGestureRecognizer
لتحديد مقدار سحب المستخدم وتحديث مركز المشاهدات المجرى/الإطار/التحويل وفقًا لذلك.
بمجرد أن يرفع المستخدم إصبعه ، يتم استدعاء طريقة الإجراء في المرة الأخيرة مع تعيين حالة Gesturerecoginzers UIGestureRecognizerStateEnded
. حان الوقت الآن لمعرفة ما إذا كان السحب ناجحًا. على سبيل المثال ، يمكن لـ Popovercontroller أن يسأل MainController عبر التفويض إذا كان هناك هدف إسقاط تحت الموضع الحالي للوجهات ، إذا كان الأمر كذلك ، يمكن أن يتخذ MainController إجراءً ، وإلا عرض فرعي لعرضه.
آمل أن يكون هذا مفهومًا ومفيدًا إلى حد ما.
نصائح أخرى
وفقًا للوثائق الخاصة بـ Uipopovercontroller ، عندما يتم تقديم البوبوفر ، يتم تقديمه على "نافذة" خاصة. ولهذا السبب ، فإن مجرد إضافة عرض فرعي إلى وحدة التحكم في محتوى محتوى وحدة تحكم Popover View لا يكفي لتكون قادرًا على سحب طريقة عرض خارج طريقة عرض وحدة التحكم في عرض Popover.
الحل الأسهل هنا هو إنشاء نافذة خاصة بك ، وإضافة عرض السحب الخاص بك إلى النافذة عند حدوث السحب. اجعل النافذة مرئية طوال مدة السحب/إسقاط ، ثم حرر النافذة عند اكتمالها.
كما ذكر أعلاه ، فإن معرفات الإيماءات (GR) هي الأنسب لوظيفة السحب/الإسقاط. بمجرد أن تتحول حالة GR إلى "بدء" "، ستتحكم GR في جميع اللمسات حتى يتم تحقيق الحالة" المنتهية "أو" الملغاة "مما يجعلها مثالية لسحب المشاهدات بين وحدات التحكم في العرض وكذلك Windows :)
مثال:
@interface MySplitViewController : UISplitViewController {
UIView *dragView;
UIWindow *dragWindow;
}
تطبيق:ملاحظة لا نحتاج إلى تسمية "Makekeyandvisible" على نافذتنا. نحتاج فقط إلى تعيين خاصية "مخفية"
من Apple فيما يتعلق بالطريقة Makekeyandvisible: // الراحة. معظم التطبيقات تسمي هذا لإظهار النافذة الرئيسية وجعلها مفتاحًا أيضًا. وإلا استخدم خاصية عرض مخفية
-(void)dragBegan{
self.dragWindow = [[UIWindow alloc] initWithFrame:self.view.window.frame];
[self.dragWindow addSubview:self.dragView];
[self.dragWindow setHidden:NO];
}
هنا نتعامل مع حالة "نهاية" أو "إلغاء" التعرف على الإيماءات.ملاحظة: من المهم إزالة النافذة عند اكتمال السحب/الإسقاط أو ستفقد تفاعل المستخدم مع المشاهدات أدناه.
-(void)dragEnded{
[self.dragView removeFromSuperview];
[self.dragWindow setHidden:YES];
[self.dragWindow release];
[self.view addSubview:self.dragView];
}