UIView.كيف يمكنني تقييد القياس على بعد واحد فقط

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

  •  07-07-2019
  •  | 
  •  

سؤال

لدي مثيل UIScrollview يحتوي على مثيل UIView.يعد UIView مجرد حاوية لمجموعة أفقية من مثيلات UIImageView.- يتم توفير التكبير/التصغير بواسطة UIScrollView وUIScrollViewDelegate.أرغب في تقييد حدوث التكبير/التصغير فقط على طول المحور الأفقي دون أي تغيير عمودي على الإطلاق.كيف أفعل هذا؟

هل هناك طريقة، على سبيل المثال، للفئة الفرعية UIView وتجاوز الطريقة المناسبة لمنع القياس الرأسي؟يعجبني هذا الأسلوب ولكني غير واضح بشأن الطريقة التي يجب تجاوزها وما الذي يجب أن تفعله هذه الطريقة المتجاوزة بالفعل.

الهتافات دوغ

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

المحلول

يشبه ما أصفه فيه هذه الإجابة, ، يمكنك إنشاء فئة فرعية UIView وتجاوز -setTransform:طريقة الوصول لضبط التحويل الذي سيحاول UIScrollView تطبيقه على UIView الخاص بك.قم بتعيين UIView هذا لاستضافة العروض الفرعية للمحتوى الخاص بك وجعله العرض الفرعي لـ UIScrollView.

ضمن -setTransform الذي تم تجاوزه:، ستحتاج إلى إجراء التحويل الذي يرغب UIScrollView في تطبيقه وضبطه بحيث يصبح القياس ساري المفعول في اتجاه واحد فقط.من وثائق حول كيفية إنشاء مصفوفات CGaffineTransform, ، أعتقد أن التنفيذ التالي يجب أن يقيد القياس ليكون على طول الاتجاه الأفقي فقط:

- (void)setTransform:(CGAffineTransform)newValue;
{
 CGAffineTransform constrainedTransform = CGAffineTransformIdentity;
 constrainedTransform.a = newValue.a;
 [super setTransform:constrainedTransform];
}

نصائح أخرى

وعن طريق OS 3.0، يمكن أن أقول لكم التكبير لتكبير إلى المستطيل في scrollview. لدي هذا في بلدي المنطق الذي يكشف الصنابير.

CGRect zoomRect = [self zoomRectForScale:newScale withCenter:CGPointMake(tapPoint.x, tapPoint.y) inScrollView:scrollView];
[scrollView zoomToRect:zoomRect animated:YES];

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

في التمرير فيو ديد زووم:, ، اضبط متغيرات عرض المحتوى الخاص بك بناءً على ZoomScale, ، إعادة ضبط ZoomScale إلى 1.0، ثم افعل setNeedsDisplay في عرض المحتوى.تعامل مع التكبير/التصغير الفعلي (في أي اتجاه تريده) في عرض المحتوى الخاص بك رسم مستقيم:.

التفاصيل القبيحة:

  1. أثناء إجراء التكبير/التصغير، يتغير UIScollView contentOffset و contentScale, ، لذا احفظ تلك القيم السابقة في التمريرالعرضWillBeginالتكبير/التصغير: و في التمرير فيو ديد زووم: حتى تتمكن من حساب جديد contentOffset نفسك وفقا للتكبير.

  2. منذ التغيير ZoomScale سوف يطلق النار على الفور آخر التمرير فيو ديد زووم:, ، يجب عليك تعيين BOOL قبل (ومسحه بعد) إعادة تعيين ZoomScale.اختبر BOOL في بداية التمرير فيو ديد زووم: والعودة إذا كان صحيحا.

  3. قد تحتاج إلى منع التمريرالعرضالتمرير: بينما يكون التكبير/التصغير قيد التقدم (اختبر BOOL؛وضعه في التمريرالعرضWillBeginالتكبير/التصغير: ومسحه في التمريرViewDidEndZooming:) لذلك يتم استخدام إزاحات المحتوى الخاصة بك أثناء تقدم التكبير/التصغير.

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