2016-12-01 2 views
0

Как реализовать границу с одной стороны и затухание для UIView. Мне жаль, что у меня недостаточно репутации, чтобы опубликовать снимок экрана. Но есть пример в приложении iOS. Если вы нажмете «+», то «добавьте телефон», будет вертикальная линия, которая именно то, что я хочу.Как сделать границу выцветания для uiview

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

Спасибо за любой ответ и предложение заблаговременно.

+0

Вы хотите вывести изображение на другой цвет RGB? – SPlatten

+0

@SPlatten Просто исчезает с серого на белый. Я закончил его с помощью CAGradientLayer, предложенного ниже. Спасибо за помощь – Todanley

ответ

0

Вы можете использовать CAGradientLayer:

let layer = CAGradientLayer() 
layer.colors = [UIColor.white.cgColor, UIColor.gray.cgColor] 
// play around with layer.locations and layer.{startPoint|endPoint} to suit your needs 

Вы можете создать подкласс UIView и переопределить его layerClass вернуть слой градиента, а затем размер и положение, что посмотреть, как вам угодно:

override class func layerClass() -> AnyClass { 
    return CAGradientLayer.self 
} 
// configure the layer with color, end/start and locations in init() 

Это позволяет отбросить этот вид в любом месте и использовать автомасштабирование по размеру и разместить его по своему усмотрению.

+0

Спасибо большое! Сейчас я играю со слоем в UIView 'init. Я думаю, что нахожусь на правильном пути, но просто задаю вопрос: почему UIView устанавливает свойство слоя как get-only? Почему бы просто не позволить нам устанавливать свойство слоя, а не сначала возвращать layerClass, а затем настраивать слой в init (раньше у меня не было опыта использования CALayer). Мне жаль, что я проголосовал за ваш ответ, но это не считалось, потому что в настоящий момент у меня нет достаточной репутации. – Todanley

+0

«UIView» поддерживается «CALayer», поэтому UIKit должен знать тип слоя во время инициализации (обратите внимание, что 'layerClass' возвращает тип, а не экземпляр слоя). То есть, слой поддержки представления не может быть изменен после его создания. Если вы найдете мой ответ подходящим, я уверен, что вы можете отметить его как правильный :-) –

+0

Я уже закончил то, что было после использования CAGradientLayer. Большое спасибо. И ваше объяснение о CALayer решило мой вопрос. Теперь я понимаю, почему свойство слоя UIView является get-only, Большое спасибо. Я думаю, что я успешно принял ваш ответ, нажав на эту галочку. – Todanley