TTSpeechBubbleShape в Three20 рисует только речевые треугольники сверху и снизу

Итак, я использую библиотеку Three20 для приложения для iPhone и хочу использовать стиль TTSpeechBubbleShape для представления. Но треугольник, кажется, не хочет рисовать ни с левой, ни с правой стороны. Я вижу в источнике, что это много геометрии, и мне было интересно, занимался ли кто-нибудь этим или знал, как это исправить.


person Genericrich    schedule 02.04.2010    source источник


Ответы (2)


Возможно, вы ищете TTRoundedLeftArrowShape и TTRoundedRightArrowShape, которые выглядят как стандартная кнопка «Назад» iPhone.

person leolobato    schedule 20.07.2010

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

Код можно найти здесь.

Изменения в addRightEdge:

if (_pointLocation > 135 && _pointLocation < 225) {
  CGFloat pw = _pointAngle >= 90 && _pointAngle < 270 ? _pointSize.width : -_pointSize.width;
  CGFloat pointY = ((_pointLocation-135)/90)*fh;
  CGPathAddLineToPoint(path, nil, fw, pointY-floor(_pointSize.height/2));
  CGPathAddLineToPoint(path, nil, fw+pw, pointY);
  CGPathAddLineToPoint(path, nil, fw, pointY+floor(_pointSize.height/2));
}

Изменения в addLeftEdge:

if ((_pointLocation > 315 && _pointLocation <= 360)
    || (_pointLocation >= 0 && _pointLocation < 45)) {
  CGFloat pw = ((_pointAngle >= 270 && _pointAngle <= 360)
                || (_pointAngle >= 0 && _pointAngle <= 90))
    ? _pointSize.width
    : -_pointSize.width;
  CGFloat pointY = (_pointLocation > 315 && _pointLocation <= 360)
    ? fh-(((_pointLocation-315)/90)*fh)
    : (fh/2)-((_pointLocation/90)*fh);
  CGPathAddLineToPoint(path, nil, 0, pointY+floor(_pointSize.height/2));
  CGPathAddLineToPoint(path, nil, -pw, pointY);
  CGPathAddLineToPoint(path, nil, 0, pointY-floor(_pointSize.height/2));
}
person David H    schedule 14.05.2011
comment
Спрашивающий должен отметить этот ответ как правильный. Красивый и простой в использовании. Я использую Three20 1.0.5 (последнюю на сегодняшний день), и этот код отсутствует, хотя я надеюсь, что вы отправили запрос на включение. Ваше здоровье! И спасибо за исправление! - person Brett; 24.06.2011