Как я могу уменьшить искажение закругленных углов моего iOS TTTextEditor в Three20?

#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:

Попробуйте настроить свой вид так, чтобы он не рисовался непрозрачным. Вид рисуется с помощью прозрачных пленок.