Градиенты на UIView и UILabels На iPhone [дубликат]

Я думаю, что если кто-то захочет использовать PHP и MySQL или какой-нибудь другой сервер базы данных:

  1. Подумайте об обучении PDO (объекты данных PHP) - это база данных уровень доступа, обеспечивающий единый метод доступа к нескольким базам данных.
  2. Подумайте об обучении MySQLi
  3. Используйте собственные функции PHP, такие как: strip_tags , mysql_real_escape_string или если переменная числовая, просто (int)$foo. Подробнее о типах переменных в PHP читайте здесь . Если вы используете библиотеки, такие как PDO или MySQLi, всегда используйте PDO :: quote () и mysqli_real_escape_string () .

Примеры библиотек:

---- PDO

----- Никакие заполнители - не спешили для SQL-инъекций! Это плохо

$request = $pdoConnection->("INSERT INTO parents (name, addr, city) values ($name, $addr, $city)");

----- Без имени заполнители

$request = $pdoConnection->("INSERT INTO parents (name, addr, city) values (?, ?, ?);

----- Именованные заполнители

$request = $pdoConnection->("INSERT INTO parents (name, addr, city) value (:name, :addr, :city)");

--- MySQLi

$request = $mysqliConnection->prepare('
       SELECT * FROM trainers
       WHERE name = ?
       AND email = ?
       AND last_login > ?');

    $query->bind_param('first_param', 'second_param', $mail, time() - 3600);
    $query->execute();

PS:

PDO побеждает в этом сражении с легкостью. Благодаря поддержке двенадцати различных драйверов баз данных и именованных параметров мы можем игнорировать небольшую потерю производительности и привыкнуть к ее API. С точки зрения безопасности, оба они являются безопасными, пока разработчик использует их так, как они должны использоваться

. Но хотя PDO и MySQLi довольно быстры, MySQLi выполняет незначительную скорость в тестах - ~ 2,5% для незаготовленных отчетов и ~ 6,5% для подготовленных.

И, пожалуйста, проверьте каждый запрос в своей базе данных - это лучший способ предотвратить инъекцию.

219
задан Community 23 May 2017 в 02:34
поделиться

4 ответа

Вы могли также использовать графическое изображение один пиксель шириной в качестве градиента и установить свойство представления для расширения диаграммы для заполнения представления (предполагающий размышление о простом линейном градиенте и не некоторой радиальной диаграмме).

44
ответ дан Kendall Helmstetter Gelner 23 November 2019 в 04:08
поделиться

Можно использовать Базовую Графику для рисования градиента, как указано в ответе Mike's. Как более подробный пример, Вы могли создать UIView подкласс для использования в качестве фона для Вашего UILabel. В том UIView подкласс, переопределите drawRect: метод и введите код, подобный следующему:

- (void)drawRect:(CGRect)rect 
{
    CGContextRef currentContext = UIGraphicsGetCurrentContext();

    CGGradientRef glossGradient;
    CGColorSpaceRef rgbColorspace;
    size_t num_locations = 2;
    CGFloat locations[2] = { 0.0, 1.0 };
    CGFloat components[8] = { 1.0, 1.0, 1.0, 0.35,  // Start color
         1.0, 1.0, 1.0, 0.06 }; // End color

    rgbColorspace = CGColorSpaceCreateDeviceRGB();
    glossGradient = CGGradientCreateWithColorComponents(rgbColorspace, components, locations, num_locations);

    CGRect currentBounds = self.bounds;
    CGPoint topCenter = CGPointMake(CGRectGetMidX(currentBounds), 0.0f);
    CGPoint midCenter = CGPointMake(CGRectGetMidX(currentBounds), CGRectGetMidY(currentBounds));
    CGContextDrawLinearGradient(currentContext, glossGradient, topCenter, midCenter, 0);

    CGGradientRelease(glossGradient);
    CGColorSpaceRelease(rgbColorspace); 
}

Этот конкретный пример создает белый, градиент глянцевого стиля, который оттянут из вершины UIView к ее вертикальному центру. Можно установить UIView backgroundColor к тому, что Вы любите, и этот блеск будет оттянут к тому же цвет. Можно также потянуть радиальный градиент с помощью эти CGContextDrawRadialGradient функция.

просто необходимо измерить это UIView соответственно и добавить Ваш UILabel как подпредставление его для получения эффекта, которого Вы требуете.

РЕДАКТИРОВАНИЕ (4/23/2009): На предложение St3fan я заменил кадр представления его границами в коде. Это исправляет для случая, когда источник представления не (0,0).

120
ответ дан pablasso 23 November 2019 в 04:08
поделиться

Я достигаю этого в представлении с подпредставлением, которое является UIImageView. Изображение, на которое указывает ImageView, является градиентом. Затем я устанавливаю цвет фона в UIView и получаю цветной градиент. Затем я использую вид, как мне нужно, и все, что я рисую, будет под этим видом градиента. Добавив второе представление поверх ImageView, вы можете иметь некоторые параметры, будет ли ваш рисунок ниже или выше градиента ...

3
ответ дан 23 November 2019 в 04:08
поделиться

Я понимаю, что это старый поток, но для справки в будущем:

Начиная с iPhone SDK 3.0, пользовательские градиенты могут быть реализованы очень легко, без подклассов или изображений, с помощью нового CAGradientLayer :

 UIView *view = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 100)] autorelease];
 CAGradientLayer *gradient = [CAGradientLayer layer];
 gradient.frame = view.bounds;
 gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor], (id)[[UIColor whiteColor] CGColor], nil];
 [view.layer insertSublayer:gradient atIndex:0];

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

779
ответ дан 23 November 2019 в 04:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: