Обновите UIView до ScaleFactor 2.0 для iPhone4 - PullRequest
1 голос
/ 22 июля 2010

У меня есть программа, прекрасно работающая на моем iPhone 4. Она использует созданный мной класс UIView (называемый TestView) для рисования графики с использованием Quartz (очень простая графика, например, несколько линий и кругов компьютерной графики). Однако мне нужно воспользоваться новым экраном с более высоким разрешением на iPhone 4. В настоящее время обеспечение обратной совместимости с iPhone 3, перемещение на одну «точку» в вашем коде вызывает перемещение на 2 пикселя на экране iPhone 4. , Обновив UIView до масштабного коэффициента 2,0, вы можете изменить отображение с логического координатного пространства на пиксельное пространство, чтобы использовать преимущества более высокого разрешения iPhone 4. Это должно быть легко; Я просто не могу найти документацию о том, как изменить масштабный коэффициент UIView.

Например, любая линия, которую я рисую, должна указываться функцией CGContextSetLineWidth (context, 1.0); заканчивается рисование линии шириной 2 пикселя. Мне нужно изменить это, чтобы нарисовать один пиксель в ширину.

Я нахожу объяснения, но нет примеров или методов для изменения масштабных коэффициентов в объяснении Apple о поддержке экранов высокого разрешения:

http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/SupportingResolutionIndependence/SupportingResolutionIndependence.html#//apple_ref/doc/uid/TP40007072-CH10-SW12

В документации UIView содержится атрибут contentScaleFactor, но нет метода "set". Измените строку ниже с ttp: // на http: //, чтобы превратить в URL:

TTP: //developer.apple.com/iphone/library/documentation/UIKit/Reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/cl/UIView

1 Ответ

1 голос
/ 23 июля 2010

Хорошо, так что iPhone 4 достаточно хорош, чтобы автоматически создавать все его UIViews с масштабным коэффициентом 2. Более серьезная проблема заключается в том, что CG отображает линии необычным способом (насколько я могу судить).Если вы сделаете ширину линии равной 1,0 / contentScaleFactor (то есть 0,5 для iPhone 4), и проведете линию прямо вверх и вниз (или прямо из стороны в сторону), в половине случаев это будет идеальная, яркая линия шириной одинпиксели.Но в другую половину времени он представляет собой строку шириной два пикселя, причем обе строки пикселей освещены только наполовину.Это выглядит хорошо в сложных контекстах, особенно когда речь идет о движении, но если вы просто исследуете одну строку, это довольно раздражает.

Хак, чтобы обойти это для одной строки, это "перемешать" координату на половину значения.Поэтому, если вы рисуете от (0,0) до (0,10) и получаете линию «двойной ширины», попробуйте нарисовать от (0,5, 0) до (0,5, 10).

...