iOS Build & Run
66 subscribers
49 photos
6 videos
26 links
iOS-разработка с нуля
Download Telegram
Ну вот о чем я и говорю...

В одном из чатов чувак пишет:
Всем привет. Подскажите почему 51.373 + 0.001 получается 51.3739999999…. А не 51.374 И главное - как исправить. SwiftUI

Обратили внимание на "SwiftUI"?

Скидываю ему ссылку на видос.
Если не знаете, почему так происходит, крайне рекомендую посмотреть.

На что он отвечает:
да мне не надо) мне надо быстро эту проблему решить. если нет быстрого решения то ладно.

___

Информация для размышления:
Такие вопросы чаще всего задают чуваки, которые начинают со SwiftUI.
База - для лохов старперов...
___

Информация для размышления №2:
Если хочешь получить ответ, то задай НОРМАЛЬНЫЙ вопрос!

Если тебе надо ОКРУГЛИТЬ, то так и пиши.
Если тебе надо, чтобы складывалось правильно - напиши свой стандарт.
___

Информация для размышления №3:
Вайбкодинг...
Forwarded from КиберТопор
Релиз GPT-5, обстановка.

🕹КиберТопор — Подписаться
1
Ну вот на-ху-я?

Мы даже скопировать не можем...

Надо просто взять и сделать аналог ноушена. Взять и сделать.

В один день взяли и поменяли цвет ссылок. Т.к. я использую юноте только как содержание, у меня все состоит из ссылок. Теперь все выглядит как бледное унылое гавно...

И что самое интересное: НЕЛЬЗЯ ИЗМЕНИТЬ ЦВЕТ ССЫЛКИ.
Точнее можно изначально создать текст, задать ему параметры, а потом добавить линк. Но после уже все...

Выбесили...
Сегодня записывал видео о HitTest и ResponderChain.

Давайте немного вспомним...
🔥1
iOS Build & Run
Сегодня записывал видео о HitTest и ResponderChain. Давайте немного вспомним...
Срабатывает touchesBegan у оранжевой вью, потому что:
- Палец коснулся экрана. Событие отправляется в UIApplication.
- UIApplication передает событие активному UIWindow.
- UIWindow запускает hitTest. Находит самую глубокую (в иерархии) вью под точкой.
- UIWindow передает найденной вью событие. Вызывает у нее touchesBegan.

У серой вью touchesBegan не отрабатывает, т.к. в данном случая она является просто контейнером для оранжевой вью.
frame, bounds

История о том, как по одному вопросу понять кандидат тупо заучил или может рассуждать...
___

Этот вопрос задолбал всех, но почему его до сих пор спрашивают?

Классическая версия звучит так:
Что изменится при повороте вью?

Для скрина:
Что изменится, если раскомментировать строку 26

Предлагаю добавить побольше вариантов, чтобы было хоть чуть-чуть интересно.
___

П.С. Вечером скину вторую часть вопроса
Frame и Bounds - давайте разбираться

На собеседовании:
Вас спрашивают дежурный вопрос:
Что такое frame / bounds? Что изменяется при повороте вью?

frame - положение и размер в координатах родителя.
bounds - размер и внутренняя система координат.

При повороте вью изменится frame. Но bounds останется без изменений.

Мой любимый тупой пример из жизни:
Представьте вы лежите на кровати вдоль. Решили лечь поперек. Относительно кровати вы изменили свое положение, но голова у вас по-прежнему выше плеч.

По поводу теста
Изменится:
1. origin - потому что anchorPoint по умолчанию стоит в (0.5, 0.5)
2. frame.height и frame.width - была высота 100, длина 200, после поворота на 90° высота будет 200, длина 100.

Этим вопросом замучали всех. Он в числе первых «топ-100 вопросов».
___

Следующий вопрос:
Что произойдет при изменении bounds?

При изменении bounds будет двигаться контент (subviews), но здесь все не совсем очевидно.
При увеличении bounds (bounds.origin.x += 100) контент будет смещен влево.

Вся эта магия связана с математикой UIKit.
UIKit по умолчанию считает верхний левый угол bounds началом координат для отрисовки сабвью. Меняя bounds.size мы расширяем или сжимаем эту систему координат, но не двигаем точку начала.

Мой любимый тупой пример из жизни №2:
Представь, ты играешь в компьютерную игру. Красная вью это твой монитор. Черная - ящик. В игре ты повернул голову направо (bounds.origin.x += 100). Монитор от этого не сместился. Сместился контент. А куда он сместился? Правильно - влево!
___

Ты уже немного занервничал, запутался, и задается финальный, максимально очевидный вопрос:
Где может применяться изменение bounds?

Ответ: СкроллВью

Удивление №раз
Что такое скроллВью? Это анимированное изменение bounds.

Удивление №два
contentOffset - просто удобная обертка над bounds.origin
scrollView.contentOffset.x == scrollView.bounds.origin.x

___

П.С. А еще можно спросить как работает хитТест в скроллВью.
На таком вопросе не надо теряться, надо просто рассуждать. Все на поверхности 🤓
🤓4🔥1
Ахаха...это реально про меня :)
Гоу в обжуху 🏆
🤓2
Это я дурак?

Ранее говорил, что на сервисе yonote (российский аналог notion) произошел редизайн и изменился цвет ссылок.

Я использую его для навигации по бусти и основной контент состоит из ссылок.
___

Сегодня зашел на страницу фундаменталки и немного...удивился (скрин №1).

Написал в поддержку, возможно, я чего-то не понимаю...

Получил ответ (скрин №2).

Насколько я понимаю, поддержка предложила мне просто переделать весь контент с нуля. Спасибо, что нах_й не послали.

Для контекста
Чтобы вручную изменить цвет ссылки надо:
- создать текст
- отформатировать
- добавить ссылку
После добавлении ссылки форматирование не возможно (изменить можно только текст и ссылку).
+ нет никакой гарантии, что эти товарищи не изменяет цвет завтра...
___

Вопрос:
Почему нельзя добавить такой простой функционал как изменение цвета ссылки? 🤬
Нажатие кнопки во время анимации

Разберем по пунктам

1. Главный поток
UIView.animate вызывается на главном потоке, но Core Animation анимирует свойства асинхронно, на стороне render server. Это не блокирует main RunLoop напрямую.

2. Пока идет анимация, UIControl не принимает новые нажатия, потому что система считает, что кнопка "занята" анимацией. UIView.animate блокирует взаимодействие с вью на время анимации.

3. Во время анимации frame не обновляется «на лету», не прыгает по промежуточным состояниям, он всегда либо «старый», либо «новый». Т.к. Кнопка возвращается в исходное состояние - фрейм не меняется.

4. У любой UIView есть свойство window и цепочка superview -> superview -> ... -> UIWindow. Если кнопка находится в этой цепочке, то она участвует в хит-тестах и может принимать события. Если делать анимацию с последующим removeFromSuperview, и вью убрали из иерархии раньше, чем анимация закончилась - тап не сработает.
Это явно не наш случай.