Я пытаюсь нарисовать тень под нижним краем UIView
в Cocoa Touch. Я понимаю, что должен CGContextSetShadow()
рисовать тень, но руководство по программированию в Quartz 2D немного расплывчато:
- Сохранить графическое состояние.
- Вызовите функцию
CGContextSetShadow
, передав соответствующие значения. - Выполните все рисунки, к которым вы хотите применить тени.
- Восстановить состояние графики
Я попробовал следующее в UIView
подклассе:
- (void)drawRect:(CGRect)rect {
CGContextRef currentContext = UIGraphicsGetCurrentContext();
CGContextSaveGState(currentContext);
CGContextSetShadow(currentContext, CGSizeMake(-15, 20), 5);
CGContextRestoreGState(currentContext);
[super drawRect: rect];
}
... но это не работает для меня, и я немного застрял в (а), куда идти дальше и (б), если есть что-то, что мне нужно сделать, UIView
чтобы сделать эту работу?
источник
#import <QuartzCore/QuartzCore.h>"
в .h файл.masksToBounds
дляNO
сведет на нетcornerRadius
, нет?self.layer.backgroundColor = [[UIColor whiteColor] CGColor];
но не повезло. Какой вид должен быть прозрачным?Это замедлит работу приложения. Добавление следующей строки может улучшить производительность до тех пор, пока ваш вид будет прямоугольным:
источник
То же решение, но только для напоминания: вы можете определить тень прямо в раскадровке.
Пример:
источник
UIView
илиCGLayer
которая являетсяUIColor
оберткой дляCGColor
свойства;)Вы можете попробовать это .... вы можете играть со значениями. В
shadowRadius
диктует степень размытия.shadowOffset
диктует куда идет теньисточник
Простое и понятное решение с использованием Interface Builder
Добавьте файл с именем UIView.swift в свой проект (или просто вставьте его в любой файл):
Тогда это будет доступно в Интерфейсном Разработчике для каждого представления на Панели утилит> Инспектор атрибутов:
Вы можете легко установить тень сейчас.
Примечания:
- Тень не появится в IB, только во время выполнения.
- Как сказал Мазен Кассер
источник
Failed to set (shadowColor) user defined inspected property on (UICollectionViewCell): [<UICollectionViewCell> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key shadowColor.
UIKit
чтобы он работал, базовогоFoundation
импорта, созданного XCode, недостаточно, но он компилируется нормально. Я должен был скопировать весь исходный код. Спасибо Аксель за это хорошее решение.Я использую это как часть моих утилит. При этом мы можем не только установить тень, но и получить закругленный угол для любого
UIView
. Также вы можете установить, какой цвет тени вы предпочитаете. Обычно черный цвет предпочтительнее, но иногда, когда фон не белый, вам может понадобиться что-то еще. Вот что я использую -Чтобы использовать это, мы должны назвать это -
[utils roundedLayer:yourview.layer radius:5.0f shadow:YES];
источник
Свифт 3
источник
installShadow()
не вызывается изviewDidLoad()
илиviewWillAppear()
draw
метода просмотра. Тень идет правильно, а закругленный угол - нет.UIStackView
которое только создает макет и не имеет представления. Возможно, вам придется вставить обычныйUIView
как контейнер для всего.Если вы хотите использовать StoryBoard и не хотите продолжать вводить атрибуты времени выполнения, вы можете легко создать расширение для представлений и использовать их в раскадровке.
Шаг 1. создать расширение
шаг 2. теперь вы можете использовать эти атрибуты в раскадровке
источник
Тем, кто не смог заставить это работать (как я!), Попробовав все ответы здесь, просто убедитесь, что Clip Subviews не включен в инспекторе Атрибутов ...
источник
Свифт 3
источник
Вы можете использовать мою полезную функцию, созданную для тени и радиуса угла, как показано ниже:
Надеюсь, это поможет вам!
источник
Все Отвечать все хорошо, но я хочу добавить еще один момент
Если вы столкнулись с проблемой, когда у вас есть ячейки таблицы, замените новую ячейку на наличие несоответствия в тени, поэтому в этом случае вам нужно поместить свой теневой код в метод layoutSubviews, чтобы он хорошо работал в любых условиях.
или в ViewControllers для конкретного вида поместите теневой код в следующий метод, чтобы он работал хорошо
Я изменил свою теневую реализацию для новых разработчиков для более обобщенной формы ex:
источник
Для поддерживающих Xamarians версия ответа Xamarin.iOS / C # будет выглядеть следующим образом:
Основное отличие состоит в том, что вы получаете экземпляр, для
CGContext
которого вы напрямую вызываете соответствующие методы.источник
Вы можете использовать это,
Extension
чтобы добавить теньВы можете назвать это как
источник
Эскиз тени с использованием IBDesignable и IBInspectable в Swift 4
источник