Тень или Граница вокруг прокрутки iphone - PullRequest
8 голосов
/ 14 октября 2009

Я хотел бы нарисовать границу / тень вокруг uiscrollview, я знаю, что мог бы получить там с дополнительным представлением или scrollview, но мне не нравится обработка недостатков, но я слышал, что должна быть возможность непосредственно нарисовать границу к просмотру прокрутки, и это то, что я бы предпочел.

Я новичок в разработке iphone, любой ответ будет полезным.

Ответы [ 4 ]

19 голосов
/ 22 октября 2010

Если вы используете свойство layer вашего вида с прокруткой (или любого UIView), вы можете легко получить сплошную границу ...

#import <QuartzCore/QuartzCore.h>
...
myView.layer.borderWidth = 2;
myView.layer.borderColor = [UIColor blackColor].CGColor;

Вы также можете использовать слой для нанесения теней в реальном времени, установив свойства layer.shadow*, но производительность может быть низкой при использовании этой техники, поэтому я обычно предпочитаю использовать следующую более сложную, но более производительную технику. Вы можете создать изображение в формате PNG с прозрачностью в середине и тенями по краю - оно должно иметь 9 различных областей: 4 для каждого угла, 4 для каждого края и полностью прозрачную область пикселей 1x1 в середине. Например, если ваша тень распространяется на изображение на 6 пикселей, ваше изображение будет 13x13 с границами шириной 6 пикселей / максимум и областью 1x1 посередине. Затем вы устанавливаете его как масштабируемое изображение, используя:

newImage = [image stretchableImageWithLeftCapWidth:6 topCapHeight:6];

ОБНОВЛЕНИЕ: Поскольку iOS 5.0 stretchableImageWithLeftCapWidth:topCapHeight: устарела, используйте его, только если вы все еще хотите поддерживать устройства iOS 4.x. Если вы хотите поддерживать только устройства iOS 5.0+, используйте это вместо:

newImage = [image resizableImageWithCapInsets:UIEdgeInsetsMake(6, 6, 6, 6)];

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

5 голосов
/ 23 апреля 2012

Не забудьте:

#import <QuartzCore/QuartzCore.h>

Если вы хотите использовать

myView.layer.borderWidth = 2;
myView.layer.borderColor = [UIColor blackColor].CGColor;
2 голосов
/ 25 августа 2011

Чтобы получить CGColorRef от UIColor, вы также можете использовать этот пример:

myView.layer.borderWidth = 2;
myView.layer.borderColor = [UIColor blackColor].CGColor;
1 голос
/ 05 августа 2011

myView.layout.borderColor генерирует предупреждение о несовместимом указателе при использовании UIColor и не изменяет границу для меня.

Использование CGColorRef работало для меня вместо:

CGFloat lComponents[4] = {0,0,0,1};
CGColorSpaceRef lColorSpace = CGColorSpaceCreateDeviceRGB();
myView.layer.borderColor = CGColorCreate(lColorSpace, lComponents);
CGColorSpaceRelease(lColorSpace);
...