// corner radius
blueView.layer.cornerRadius = 10
// border
blueView.layer.borderWidth = 1.0
blueView.layer.borderColor = UIColor.black.cgColor
// shadow
blueView.layer.shadowColor = UIColor.black.cgColor
blueView.layer.shadowOffset = CGSize(width: 3, height: 3)
blueView.layer.shadowOpacity = 0.7
blueView.layer.shadowRadius = 4.0
Что делать, если есть подслои или подпункты (например, изображение), содержимое которых мы хотим скопировать в рамки нашего представления?
Мы можем выполнить это с помощью
blueView.layer.masksToBounds = true
(альтернативно blueView.clipsToBounds = true
дает тот же результат .)
Но, oh no! Тень также была обрезана, потому что она находится за пределами границ! Что делать? Что делать?
Решение
Используйте отдельные виды для тени и границы. Основной вид прозрачен и имеет тень.
// add the shadow to the base view
baseView.backgroundColor = UIColor.clear
baseView.layer.shadowColor = UIColor.black.cgColor
baseView.layer.shadowOffset = CGSize(width: 3, height: 3)
baseView.layer.shadowOpacity = 0.7
baseView.layer.shadowRadius = 4.0
// add the border to subview
let borderView = UIView()
borderView.frame = baseView.bounds
borderView.layer.cornerRadius = 10
borderView.layer.borderColor = UIColor.black.cgColor
borderView.layer.borderWidth = 1.0
borderView.layer.masksToBounds = true
baseView.addSubview(borderView)
// add any other subcontent that you want clipped
let otherSubContent = UIImageView()
otherSubContent.image = UIImage(named: "lion")
otherSubContent.frame = borderView.bounds
borderView.addSubview(otherSubContent)
Это дает следующий результат:
Добавление закругленных углов и теней может стать хитом производительности. Вы можете повысить производительность, используя предопределенный путь для тени, а также указав, что он растеризован. Следующий код можно добавить к приведенному выше примеру.
baseView.layer.shadowPath = UIBezierPath(roundedRect: baseView.bounds, cornerRadius: 10).cgPath
baseView.layer.shouldRasterize = true
baseView.layer.rasterizationScale = UIScreen.main.scale
Подробнее см. в этом сообщении . Здесь здесь и здесь .
Этот ответ был протестирован с помощью Swift 4 и Xcode 9.
есть способ создать Intent, который получает веб-URL в качестве источника для apk-файла. Что-то вроде intent.setDataAndType (новый URL ("http: // ....")
blockquote>Не входит в стандартную версию Android. Установщик приложения знает о схеме
file
и Android 7.0+ знает о схемеcontent
, но не знает о схемеhttp
.Все учебники делают это в два этапа ... Загрузите файл и сохраните его в Память SD-карты телефона.
blockquote>Это делается несколькими учебниками. Большинство загружают файл на внешнее хранилище , которое отличается от съемного хранилища . В Android 7.0+ вы также можете загрузить на внутреннее хранилище и использовать
FileProvider
(или его эквивалент), чтобы сделать его доступным черезcontent
Uri
.