Рубрика: Разработка
Сколько стоит iPhone X
Изображение из пакета приложения в WebView, React Native, Android
Если вам потребуется отобразить статичный контент в WebView
в Android приложении, сделанном на React Native, и при этом использовать в HTML контенте изображения, хранящиеся локально в пакете приложения, то вы можете настроить WebView
так, чтобы его source
содержал в baseUrl
указание на file:///android_asset/
тогда в итоге вы сможете отобразить тег img
со значением src="./image.png"
, где image.png
– это имя файла изображения, изображение при этом необходимо поместить в папке android/app/src/main/assets
. Конечно, вы можете использовать более глубокие пути до папок и файлов и более сложную иерархию каталогов.
iPhone X
JavaScript
Немножко юмора
const a = 0
const b = undefined
const c = 1 / 'a'
console.log(isNaN(a), a, typeof a)
console.log(isNaN(b), b, typeof b)
console.log(isNaN(c), c, typeof c)
Консоль:
false 0 "number"
true undefined "undefined"
true NaN "number"
То есть Not a Number имеет тип number! ?
И бонусом весёлое видео:
P.S. Не стоит воспринимать эту запись слишком серьёзно.
Хакинтош за 50 тысяч рублей
С недавних пор я работаю за новым MacBook Pro 15″ c процессором Core i7 на 8 потоков – этому я несказанно рад. Но вот чему не рад – это моему домашнему Mac mini 11 года выпуска, в котором стоит старенький Core i5 c 4 потоками. Хоть я и сделал в минике Fusion Drive, добавив SSD на 120 гигабайт, а так же впихнув в него максимум оперативной памяти, доведя её объем до сопоставимых с новым ноутбуком 16 гигабайт, всё равно по главному качеству – производительности – домашний компьютер теперь отстает от рабочего в 3 раза! Этот контраст несколько печалит, так как такое разительное отличие в работе крайне заметно. Миник на фоне ноутбука стал казаться «тормозом», хотя раньше меня он более-менее устраивал.
В связи с этим решил посмотреть, что можно предпринять, чтобы изменить такое положение вещей, так как брать ноутбук с работы не вариант и домашний компьютер надо обновлять. В конце концов ему уже 6 лет!
Быстрая отправка сообщений в мессенджеры
Бывает, надо сделать кнопку «Поделиться» для определенного мессенджера. Самый быстрый способ — это url-схемы. Можно просто вызвать [[UIApplication sharedApplication] openURL:url]; для правильно сконфигурированной ссылки и установленный на телефоне мессенджер примет переданный текст для дальнейшей обработки.
Сейчас покажу, как это сделать для WhatsApp, Viber и Telegram. Читать далее Быстрая отправка сообщений в мессенджеры
Live Rendering и локализация
Есть в Xcode отличная возможность сразу в интерфейсе Interface Builder видеть итоговый результат отрисовки отличных от стандартных компонентов. Например, вы можете сделать свою кнопку с обводкой, добавив три свойства:
1 2 3 4 5 6 |
IB_DESIGNABLE @interface MyButton : UIButton @property (nonatomic, assign) IBInspectable CGFloat lineWidth; @property (nonatomic, assign) IBInspectable CGFloat cornerRadius; @property (nonatomic, copy) IBInspectable UIColor *lineColor; @end |
Значения этим свойствам можно буден назначить в панели инспектора при редактировании xib или storyboard, а при правильной реализации класса эти изменения тут же отобразятся на вашей кнопке. Подробнее прочитать можно тут, тут и в официальной документации.
Я же хочу поделиться результатом компиляции нескольких идей относительно локализации объектов, находящихся в xib или storyboard.
Ускоряем Xcode с помощью RAM disk
В операционной системе macOS есть возможность создать виртуальный диск, логический раздел, который будет находиться целиком в оперативной памяти. Иногда его удобно использовать, если вам требуется временное высокоскоростное хранилище для ваших файлов, с которыми вы работаете в данный момент. Например, в случае с Xcode это может быть место, где должны находиться файлы Derived Data.
Для начала запустите Терминал и из под sudo выполните команду:
1 |
diskutil erasevolume HFS+ "ramdisk" `hdiutil attach -nomount ram://2048576` |
Она создаст в оперативной памяти диск HFS+ размером в один гигабайт и примонтирует его. Теперь его можно указать как ‘/Volumes/ramdisk’ в настройках Xcode ➝ Preferences ➝ Locations ➝ Derived Data ➝ выбрать ‘Custom’ ➝ вписать ‘/Volumes/ramdisk’. Всё! Для большей уверенности можете переоткрыть проект или рабочее пространство вашего приложения. Вы заметите заметное ускорение работы с проектом, особенно при сборке и компиляции.
ВНИМАНИЕ: все данные будут удалены после размонтирования виртуального диска!!! Недопустимо хранить на нём важные данные и файлы!
Лично у меня при сборке проекта с обычными настройками (Fusion Drive 120GB SSD + 500GB HDD) на всё уходит 165 секунд, а при использовании RAM disk всего 72 секунды. Прирост скорости в 2,3 раза.
Изменение визуальных свойств существующих объектов через протокол UIAppearance
Уже довольно давно, начиная с iOS 5, у программистов появился удобный механизм стилизации внешнего вида компонентов интерфейсов – UIAppearance.
Например, вот так легко установить белый цвет для кнопок и заголовка на всех UINavigationBar и наследниках:
1 2 |
[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]]; [[UINavigationBar appearance] setTitleTextAttributes: @{NSForegroundColorAttributeName:[UIColor whiteColor]}]; |
И это замечательный и удобный инструмент, так как влияет глобально на всё приложение. Если вам требуется изменять только определенные элементы, то можно либо сделать для них соответствующий субкласс от стандартного, либо воспользоваться методом
1 |
+ (instancetype)appearanceWhenContainedInInstancesOfClasses:(NSArray> *)containerTypes |
который применит указанные параметры только к тем элементам, что вложены в объекты соответствующих классов.
Пример из документации:
1 2 |
[[UINavigationBar appearanceWhenContainedInInstancesOfClasses:@[[UISplitViewController class]]] setBarTintColor:myColor]; [[UINavigationBar appearanceWhenContainedInInstancesOfClasses:@[[UITabBarController class], [UISplitViewController class]]] setBarTintColor:myTabbedNavBarColor]; |
И всё работает замечательно, до того момента, когда в дело вступает один нюанс, описанный в документации:
NOTE
iOS applies appearance changes when a view enters a window, it doesn’t change the appearance of a view that’s already in a window. To change the appearance of a view that’s currently in a window, remove the view from the view hierarchy and then put it back.
Как это свойство влияет на подход к использованию данных методов?
Читать далее Изменение визуальных свойств существующих объектов через протокол UIAppearance