iOS - كيف يمكنك التحكم في حجم وحدة تحكم العرض الوسائط؟

StackOverflow https://stackoverflow.com/questions/4231022

  •  26-09-2019
  •  | 
  •  

سؤال

أنا أقدم وحدة تحكم عرض مشروط. إذا كان الأمر مهمًا ، فسيتم تمريره من القاع. كيف يمكنني التحكم في أي جزء من الشاشة التي يشغلها؟

تحرير: لدي ما يلي في وحدة تحكم العرض المشروط. إنه لا يساعد.

- (void)viewDidLoad {
    TestResultView *trv = [[TestResultView alloc]initWithTest: [Model m].currentTest];
    self.view = trv;
    trv.frame = CGRectMake(0, 320, 320, 160);
    [trv release];
    [super viewDidLoad];
}
هل كانت مفيدة؟

المحلول

يمكنك تعديل إطار وحدة التحكم في العرض ، ولكن إذا كنت تستخدم UiviewController's -presentModalViewController: الرسوم المتحركة: الطريقة ، سيتم تفريغ العرض الخلف بمجرد الانتهاء من طريقة العرض الواضحة على الشاشة (هذا يفترض أنك على iPhone) وسترى شاشة بيضاء يجب أن تكون فيها عرض الخلفية. يفترض iOS أن وحدة تحكم العرض الوسائط الخاصة بك ستكون وحدة تحكم عرض كاملة على الشاشة ، وتفريغ العرض الآخر لحفظ الذاكرة.

إذا كنت ترغب حقًا في إظهار عرض على جزء من الشاشة ، فيجب عليك بدلاً من ذلك إضافة Uiview (بدون UiviewController) إلى عرض UiviewController الحالي الخاص بك باعتباره عرضًا فرعيًا ، ثم تحريكه على الشاشة. أعتقد أن شيئًا كهذا سيعمل في فصل UIVIEWController الخاص بك والذي سيقدم العرض:

// Add the view as a subview and position it offscreen just below the current view
UIView *myHalfView = [[UIView alloc] initWithFrame:someAppropriateFrame];
[self.view addSubview:myHalfView];
CGRect offScreenFrame = myHalfView.bounds;
offScreenFrame.origin = CGPointMake(0.0, CGRectGetMaxY(self.view.frame));

// Now animate the view upwards
[UIView beginAnimations:nil context:nil];
// Move the view upwards the height of your sliding view so it's entirely onscreen
myHalfView.center = CGPointMake(myHalfView.center.x, myHalfView.center.y - myHalfView.bounds.size.height);
[UIView commitAnimations];
[myHalfView release];

للحصول على نقاط المكافأة ، يمكنك أن تتلاشى من خلال الإعداد

myHalfView.alpha = 0.0;

قبل كتلة الرسوم المتحركة UIVIEW ، والإعداد

myHalfView.alpha = 1.0;

داخل الكتلة بعد تحريك خاصية المركز.

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

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

نصائح أخرى

هذا لطيف ، تشرح الإجابة المقبولة أعلاه اختراقًا لطيفًا لتقديم عمليات عرض فرعية تشعر وكأنها ModalViews ، ولكن ماذا لو كانت جهاز iPad ، ويمكنني بالفعل إعطائها modalviewController الذي لا يغطي الشاشة بأكملها.

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

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

إليك ما سيعطيك إطارًا مخصصًا لـ ModalView:

MyViewController *viewController = [[MyViewController alloc] init];
viewConroller.modalPresentationStyle = UIModalPresentationFormSheet;
[self presentModalViewController:viewController animated:YES];
    //superView of viewController's view is modalViewController's view, which we were after
viewController.view.superview.frame = CGRectMake(x,y,w,h);
    //x y w h - can have desired values.

أود أن أضيف إلى إجابة @dsaw أن الرؤية الإشرافية حول العرض المشروط لا يبدو أنها تدور نظام الإحداثيات في وضع المناظر الطبيعية. هنا هو الرمز الذي استخدمته في تطبيقي الخاص:

MyViewController* modalVC = [[MyViewController alloc] init];        
modalVC.modalPresentationStyle = UIModalPresentationFormSheet;
[self presentModalViewController:modalVC animated:NO];
CGRect r = CGRectMake(self.view.bounds.size.width/2 - 236,
                      self.view.bounds.size.height/2 - 130,
                      472, 260);
r = [self.view convertRect:r toView:modalVC.view.superview.superview];
modalVC.view.superview.frame = r;

على الرغم من أن الرؤية الإشرافية قد لا تدور مع iPad ، إلا أنها تبدو أنها تفعل الشيء الصحيح والحفاظ على عرض الوسائط المتمركزة إذا قمت بتدوير جهاز iPad بعد إظهار العرض المشروط.

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