Падающая тень на тексте UITextField

Не много времени в данный момент, но просто первое, что пришло на ум...

модель объекта позволяет Вам дать последовательный интерфейс базе данных (и другие возможные системы) даже вне того, что может сделать интерфейс хранимой процедуры. При помощи общекорпоративных бизнес-моделей можно удостовериться, что все приложения последовательно влияют на данные, которые являются ОЧЕНЬ важной вещью. Иначе Вы заканчиваете с неправильными данными, которые являются просто злыми.

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

Вот несколько вещей, которые необходимо иметь в виду (IMO) хотя:

  1. Сгенерированный код SQL плох (исключения для следования). Извините, я знаю, что много людей думает, что экономит время, но я никогда не находил систему, которая могла сгенерировать более эффективный код, чем, что я мог записать, и часто код просто ужасен. Вы также часто заканчиваете тем, что генерировали тонну кода SQL, который никогда не привыкает. Исключением здесь являются очень простые шаблоны, как, возможно, справочные таблицы. Много людей увлекается на нем все же.
  2. Объекты <> Таблицы (или даже объекты логической модели данных обязательно). Модель данных часто имеет правила данных, которые должны быть осуществлены максимально тесно к базе данных, которая может включать правила вокруг, как строки таблицы касаются друг друга или других подобных правил, которые слишком сложны для декларативного RI. Они должны быть обработаны в хранимых процедурах. Если всеми Вашими хранимыми процедурами является простой CRUD procs, Вы не можете сделать этого. Вдобавок ко всему, модель CRUD обычно создает проблемы производительности, потому что она не минимизирует распространения в прямом и обратном направлениях по сети к базе данных. Это часто - самое большое узкое место в корпоративном приложении.
54
задан FreeAsInBeer 22 August 2011 в 07:47
поделиться

2 ответа

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

Две идеи:

(1 ) [Умеренно сложно кодировать.] Добавить второй UITextField позади оригинала с очень маленьким смещением (возможно, на (0,2,0,8)?). Вы можете прослушивать каждое изменение текста по клавишам, реализуя метод textField: shouldChangeCharactersInRange: replaceString: в протоколе UITextFieldDelegate . Используя это, вы можете одновременно обновлять нижний текст. Вы также можете сделать нижний текст (текст тени) серым и даже слегка размытым, используя тот факт, что текстовые прямоугольники с частичным смещением выглядят размытыми. Добавлено: О да, не забудьте установить верхнее текстовое поле ' s цвет фона на [UIColor clearColor] , если вы согласны с этой идеей.

(2) [Кодировать еще интереснее.] Подкласс UITextField и переопределить метод drawRect: . Я не делал этого раньше, поэтому сразу упомяну, что это зависит от того, является ли это назначенным методом рисования, и может оказаться, что вам придется переопределить другую функцию рисования, такую ​​как drawTextInRect: , который относится к UITextField . Теперь настройте контекст рисования для рисования теней с помощью CGContextSetShadow функций и вызовите [super drawRect: rect]; . Надеюсь, это сработает - в случае, если исходный код UITextField очищает параметры тени контекста рисования, эта идея скрывается, и вы

19
ответ дан 7 November 2019 в 07:31
поделиться

У меня немного другая проблема - мне нужна размытая тень на UILabel. К счастью, решением этой проблемы оказалось число (2) от Тайлера

Вот мой код:

- (void) drawTextInRect:(CGRect)rect {
    CGSize myShadowOffset = CGSizeMake(4, -4);
    CGFloat myColorValues[] = {0, 0, 0, .8};

    CGContextRef myContext = UIGraphicsGetCurrentContext();
    CGContextSaveGState(myContext);

    CGColorSpaceRef myColorSpace = CGColorSpaceCreateDeviceRGB();
    CGColorRef myColor = CGColorCreate(myColorSpace, myColorValues);
    CGContextSetShadowWithColor (myContext, myShadowOffset, 5, myColor);

    [super drawTextInRect:rect];

    CGColorRelease(myColor);
    CGColorSpaceRelease(myColorSpace); 

    CGContextRestoreGState(myContext);
}

Это класс, который расширяется от UILabel и рисует текст с тенью вниз и вправо на 4 пикселя, тень серая с непрозрачностью 80% и заметно размыта.

Я думаю, что решение Тайлера номер 2 немного лучше по производительности, чем решение Тайлера номер 1 - вы имеете дело только с одним UILabel в представлении и, если предположить, что вы ' Если не перерисовывать каждый кадр, это не снижает производительности рендеринга по сравнению с обычным UILabel.

PS Этот код в значительной степени заимствован из документации Quartz 2D

72
ответ дан 7 November 2019 в 07:31
поделиться