هل هناك طريقة لتحويل نظام الإحداثيات بعد تغيير إلى اتجاه المناظر الطبيعية؟

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

  •  23-08-2019
  •  | 
  •  

سؤال

في تطبيق OS iPhone يستند إلى عرض، أقوم بتغيير الاتجاه من الاتجاه الأولية الأولية إلى اتجاه أفقي (UIInterfaceorientationLandScaperight). ولكن الآن X، أصل ذ (0،0) في أسفل اليسار ركن (بدلا من الجزء العلوي من اليسار المعتادة) وفي كل مرة أرغب في القيام بشيء ينطوي على إحداثيات، يجب إعادة حسابها للتعويض عن نظام الإحداثيات الجديد. لقد لاحظت أيضا أن آرائي داخل نظام الإحداثيات الجديد لا يتصرف عادة في بعض الأحيان. إذن، هل هناك طريقة لتحويل نظام الإحداثيات مرة واحدة، مباشرة بعد أن أطفئ الاتجاه، حتى أتمكن من الحفاظ على التفكير في إحداثياتي بأنها أصلها في اليسار العلوي ركن؟

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

المحلول

إذا قمت بذلك النهج الموصى به لتطبيق تحويل إلى وجهة نظرك الرئيسية من أجل تدويره:

UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
if (orientation == UIInterfaceOrientationLandscapeRight) 
{
    CGAffineTransform transform = primaryView.transform;

    // Use the status bar frame to determine the center point of the window's content area.
    CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame];
    CGRect bounds = CGRectMake(0, 0, statusBarFrame.size.height, statusBarFrame.origin.x);
    CGPoint center = CGPointMake(60.0, bounds.size.height / 2.0);

    // Set the center point of the view to the center point of the window's content area.
    primaryView.center = center;

    // Rotate the view 90 degrees around its new center point.
    transform = CGAffineTransformRotate(transform, (M_PI / 2.0));
    primaryView.transform = transform;
}   

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

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