Рисование горя с CALayer

Обновление : согласно комментариям и ссылке на SearchEngineLand большинство поисковых роботов индексирует обновленный заголовок. Ниже ответа является устаревшим, но норматив является все еще действующим.

можно просто сделать что-то как, document.title = "This is the new page title.";, но это полностью победило бы цель SEO. Большинство поисковых роботов не собирается поддерживать JavaScript во-первых, таким образом, они возьмут то, что в своей стихии как название страницы.

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

8
задан Brad Larson 20 August 2009 в 12:34
поделиться

2 ответа

Core Animation делает подобные вещи тривиальными. Предложение Брэда верно. Суть в том, что вы не Мне нужен какой-либо из этих методов для простого рендеринга слоя. Чтобы вызвать рендеринг слоя, убедитесь, что вы выполнили следующие действия:

  • Установите свойство содержимого с помощью:

    [imageLayer setContents: (id) [[UIImage imageNamed @ "image.png"] CGImage]];

  • Задайте для границ слоя нужный размер.

    [imageLayer setBounds: CGRectMake (0.0f, 0.0f, 50.0f, 50.0f)];

  • Задайте положение (положение x, y) слоя для отображения в виде. По умолчанию точка привязки - это центр слоя. Этот код центрирует слой в вашем представлении.

    [imageLayer setPosition: CGPointMake ([границы просмотра] .size.width / 2, [границы просмотра] .size.height / 2)];

  • Добавьте слой к слою вашего представления:

    [[[self view] layer] addSublayer: imageLayer];

Кстати, если хотите, вы можете установить границы и положение в одном методе, вызвав -setFrame :. Я предпочитаю использовать два вызова самостоятельно, поскольку мне кажется, что они более удобочитаемы, но это зависит от ваших предпочтений. Однако, если вы не зададите границы, положение или рамку слоя, слой не будет отображаться.

При желании вы можете избежать использования drawInContext, создав дополнительные слои, которые рисуют контуры, формы (см. CAShaperLayer) или дополнительных изображений и добавьте их как подслои вашего слоя изображения или добавьте их как подслои родительского слоя и дайте им zPosition, которое заставляет их отображаться перед слоем изображения.

Теперь, если вы хотите оживить непрозрачность, вы можете использовать неявную анимацию, просто установив свойство слоя точно описанным вами способом, например [imageLayer setOpacity: 0.0f]; Это приведет к исчезновению слоя и всех его дочерних слоев в течение 0,25 секунды.

Еще несколько мыслей.

С уважением.

18
ответ дан 5 December 2019 в 08:25
поделиться

If all that you want your various layers to do is display one image each, you shouldn't need to subclass them at all. You should just be able to set an image (in CGImageRef form) to the contents property of each layer. The layer will then handle the drawing of that image. You can obtain the Core Graphics image representation of a UIImage using its CGImage read-only property.

You are correct, though, about -drawInContext: being the right place to put more custom drawing code within a CALayer subclass. Without subclassing CALayer, you can have a delegate change the layer's drawing behavior through the -drawLayer:inContext: delegate method.

This is all described in detail within the "Providing Layer Content" section of Apple's Core Animation Programming Guide.

2
ответ дан 5 December 2019 в 08:25
поделиться
Другие вопросы по тегам:

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