Намерение для установки .apk через веб-URL

Swift

// 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

Изучение параметров

Проблема 1: Тень усекается

Что делать, если есть подслои или подпункты (например, изображение), содержимое которых мы хотим скопировать в рамки нашего представления?

Мы можем выполнить это с помощью

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)

Это дает следующий результат:

] Задача 2: Плохая производительность

Добавление закругленных углов и теней может стать хитом производительности. Вы можете повысить производительность, используя предопределенный путь для тени, а также указав, что он растеризован. Следующий код можно добавить к приведенному выше примеру.

baseView.layer.shadowPath = UIBezierPath(roundedRect: baseView.bounds, cornerRadius: 10).cgPath
baseView.layer.shouldRasterize = true
baseView.layer.rasterizationScale = UIScreen.main.scale

Подробнее см. в этом сообщении . Здесь здесь и здесь .

Этот ответ был протестирован с помощью Swift 4 и Xcode 9.

0
задан YoLo 17 January 2019 в 13:46
поделиться

1 ответ

есть способ создать Intent, который получает веб-URL в качестве источника для apk-файла. Что-то вроде intent.setDataAndType (новый URL ("http: // ....")

Не входит в стандартную версию Android. Установщик приложения знает о схеме file и Android 7.0+ знает о схеме content, но не знает о схеме http.

Все учебники делают это в два этапа ... Загрузите файл и сохраните его в Память SD-карты телефона.

Это делается несколькими учебниками. Большинство загружают файл на внешнее хранилище , которое отличается от съемного хранилища . В Android 7.0+ вы также можете загрузить на внутреннее хранилище и использовать FileProvider (или его эквивалент), чтобы сделать его доступным через content Uri.

0
ответ дан CommonsWare 17 January 2019 в 13:46
поделиться
Другие вопросы по тегам:

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