#iphone #uiview #three20 #antialiasing
#iPhone #uiview #three20 #сглаживание
Вопрос:
Я пытаюсь воспроизвести пользовательский интерфейс для приложения SMS для iphone / iOS в своем приложении. Я адаптирую Three20 TTTextBarController. К сожалению, мои усилия привели к появлению полосы, которая значительно уродливее из-за сглаживания вблизи закругленных углов.
(StackOverflow уменьшает изображение выше — пожалуйста, просмотрите изображение выше в полноэкранном режиме. При таком разрешении вы увидите сглаживание).
Код стиля Three20, который я использовал для создания элемента текстовой панели, выглядит следующим образом:
- (TTStyle*)textBarTextField {
return
[TTShapeStyle styleWithShape:[TTRoundedRectangleShape shapeWithRadius:13] next:
[TTInsetStyle styleWithInset:UIEdgeInsetsMake(6, 0, 3, 6) next:
[TTInsetStyle styleWithInset:UIEdgeInsetsMake(1, 0, 1, 0) next:
[TTShadowStyle styleWithColor:RGBACOLOR(255,255,255,0.4) blur:0 offset:CGSizeMake(0, 1) next:
[TTSolidFillStyle styleWithColor:RGBACOLOR(255,255,255,1.0) next:
[TTInnerShadowStyle styleWithColor:RGBACOLOR(0,0,0,0.4) blur:3 offset:CGSizeMake(0, 2) next:
[TTBevelBorderStyle styleWithHighlight:RGBACOLOR(0,0,0,0.25) shadow:RGBACOLOR(0,0,0,0.2)
width:1 lightSource:270 next:nil]]]]]]];
}
Кто-нибудь может посоветовать, как улучшить качество закругленных углов? В качестве альтернативы, кто-нибудь выяснил, как попиксельно эмулировать панель SMS-чата iOS?
Спасибо!
Обновить
Мой исходный код взят из TTDefaultStyles.m.
После упрощения я пришел к этому стилю:
return
[TTShapeStyle styleWithShape:[TTRoundedRectangleShape shapeWithRadius:13] next:
[TTInsetStyle styleWithInset:UIEdgeInsetsMake(6, 0, 4, 6) next:
[TTLinearGradientBorderStyle styleWithColor1:RGBCOLOR(51,51,51)
color2:RGBCOLOR(102, 102, 102) width:1 next:
[TTSolidFillStyle styleWithColor:RGBACOLOR(255,255,255,1.0) next:
[TTInnerShadowStyle styleWithColor:RGBACOLOR(0,0,0,0.8) blur:3 offset:CGSizeMake(0, 2) next:nil
]]]]];
Из того, что я могу сказать, TTInnerShadowStyle — это то, из-за чего сглаживание становится видимым в верхнем левом и правом углу. Я хотел бы получить код, который Apple использует для их бесшовной тени UITextField…
Ответ №1:
Используйте MFMessageComposeViewController в MessageUI.framework
Комментарии:
1. Так что это было бы неплохо, но, к сожалению, я на самом деле не хочу отправлять SMS, мне просто нужен код пользовательского интерфейса за вертикально растущим текстовым полем и кнопкой отправки. Не похоже, что вы можете разделить это из этого API. Также я должен поддерживать iOS 3.1 (у меня много пользователей на устройствах 2G).
2. хорошо, в таком случае я предлагаю сделать снимок экрана на дисплее retina, вырезать его. И принять background для UITextField и uibutton с помощью: [[UIImage imageNamed:@»your_input_bg_png»] растягиваемое изображение с левой заглавной шириной: (half_of_image_original_height) topCapHeight: (half_of_image_original_height)] forState: UIControlStateHighlighted]; И вам не нужен стиль tree20. Или используйте полное сглаживание панели отправки, а не только контуров.
Ответ №2:
Ознакомьтесь с примерами кода HPGrowingTextView и GrowingTextView здесь:http://www.hanspinckaers.com/multi-line-uitextview-similar-to-sms
Это не только выглядит как приложение сообщений iOS, но и расширяется до нескольких строк.
Комментарии:
1. Действительно, я перешел на использование HPGrowingTextView в своем коде вместо Three20. Facebook Messenger также использует HPGrowingTextView.
Ответ №3:
Я бы сократил ваш стиль… у вас есть 2 вставки подряд, отбрасываемая тень и граница скоса, и все это тоже в случайном порядке. Любой из них может быть причиной вашей размытости. Почему бы вам не начать с простого TTShapeStyle
, затем TTInnerShadowStyle
.
Комментарии:
1. Я упростил, и оказывается, что причиной сглаживания является TTInnerShadowStyle.
2. Отлично. уменьшите размытость этого стиля.
Ответ №4:
Попробуйте настроить свой вид так, чтобы он не рисовался непрозрачным. Вид рисуется с помощью прозрачных пленок.