Ответы пользователя по тегу iOS
  • Как оценить время на разработку iOS приложения аудиоплеера?

    maximglobak
    @maximglobak
    iOS developer
    Вопрос оценки сроков всегда стоит остро и придерживаюсь того, что программист оценивает задачи по своим силам и если он оценил в 100 часов, то скорее всего он и сделает за 100 часов, это его уровень. А кто-то может сделать в 10 раз быстрее и 10 раз дороже, такое тоже возможно. Плюс стоит учитывать нативность всех элементов и например, что в Андройде есть любимая шторка, то в iOS она делается кастомно и требует времени. В крупных компаниях, где уровень разработчиков примерно одинаковый, оценка задач идет примерно одинаково +-15%.
    Ответ написан
    Комментировать
  • Тестирование моб. приложения на ios?

    maximglobak
    @maximglobak
    iOS developer
    Начиная с iOS 11 система поддерживает запись экрана, вы можете составить сценарий тестирования и они могут его вручную прогонять при этом записать и отправить вам. В режиме реального времени не получится.
    Можно через тестфлайт и это достаточно хороший вариант, но есть и альтернативы. Например https://hockeyapp.net/
    Нужно добавить вас в список тестировщиков и вы будете получать новые сборки автоматически. В инструкции вы все найдете. Может так же увеличить вес приложения.
    Ответ написан
    Комментировать
  • Как прочитать данные из файла?

    maximglobak
    @maximglobak
    iOS developer
    Можно пойти двумя путями, использовать файлы, удобнее всего json или .plist или использовать целые БД, такие как SQL или Realm например.
    Для первого сюжета файлы обычно полностью загружаются в оперативную память (полностью считываются) и ковертируются в стандартную структуру типа словаря или массива. В таком случае ты сам методами языка достаешь случайное значение.
    Как читать файлы можно найти здесь stackoverflow.com
    Но со вторым вариантом, на мой взгляд, удобнее работать, но сложнее интегрировать, там ты уже запихиваешь все данные в базу, а в приложении подключаешься к базе и средствами базы достаешь случайные значения. Если у тебя большие данные, то лучше использовать второй вариант, но для простоты лучше использовать первый вариант.
    Ответ написан
    Комментировать
  • Как спрятать данные, находящиеся в CoreData?

    maximglobak
    @maximglobak
    iOS developer
    Один из вариантов сделать прослойку для общения со своей БД и внутри нее шифровать данные, а когда запрашиваете данные, то дешифруете обратно их.
    Можно обратить внимание на Realm БД, которая может это делать из коробки или почти из коробки.
    Ответ написан
    4 комментария
  • Правильная архитектура/шаблон model для swift-приложения?

    maximglobak
    @maximglobak
    iOS developer
    Скорее всего тебе подойдет хранение данных в БД. Не стоит бояться ее использовать. Конечно ты можешь посмотреть реализацию кэша, когда данные хранятся определенное время.
    Если бы было бы больше данных, то можно было бы сказать точнее.
    А по модели, то у нее должен быть метод получения данных (асинхронный), который в зависимости от ситуации загружает данные и сохраняет в БД и отдает тебе или просто грузит их из БД.
    Кейсов много - реализаций еще больше.
    Ответ написан
    Комментировать
  • Как сделать высоту TableView "плавающей", но кратной константе?

    maximglobak
    @maximglobak
    iOS developer
    да, ты можешь такое реализовать. Если я правильно понимаю, то в тексте у тебя надо заменить все слова "Ширина" на "Высоту"?
    Тут только математические расчеты
    Надо еще понять что у тебя в приоритете, высота ячейки Х (70) или четное количество ячеек на экране. Потому что оба условия могут не совпасть.
    1) Сначала высчитай сколько у тебя всего высот Х поместится на экране.
    maxPossibleCellsNumberOnScreen = (screenHeight - statusBarHeight) / X
    2) привязываешь в коде (autolayout) таблицу к нижней границе, а высоту таблицы = Х * ( количество ячеек )
    Но количество ячеек не должно превышать количество maxPossibleCellsNumberOnScreen - 1 (место для хедера)
    3) Привязываешь хедер от верхней границы таблицы до верхней границы экрана
    Но есть еще нюанс, если таблица скролится, и у нее идеально скрыта ячейка, то пользователь может не понять, что таблицу можно скролить.
    Ответ написан
    Комментировать
  • Переходы из строк в UITableView к другим данным в рамках одного VC?

    maximglobak
    @maximglobak
    iOS developer
    Есть правило - разделяй и властвуй =) (S в SOLID)
    Придерживаясь этому правилу проект будет чище чем у тех, кто не придерживается.
    На первое время всегда кажется, что отдельный VC не нужен для этого, но зачастую логика позже начинает усложнятся и отличаться от того, что было на первом экране. Поэтому я советую разделить на два экрана и у тебя будут развязаны руки на дальнейшие изменения, да и код в одном VC будет чище.
    А экономия памяти, в таком случае, будет минимальным.
    Ответ написан
    Комментировать
  • Как добавить Collection View после конца прокрутки Table View?

    maximglobak
    @maximglobak
    iOS developer
    Заверни коллекцию вью в ячейку и добавь или в футер таблицы, или в футер секции, или в последнюю ячейку.
    Для этого смотри как делать кастомные ячейки и таблицы с несколькими типами ячеек.
    Ответ написан
    7 комментариев
  • Как в одном контроллере вызвать dealloc?

    maximglobak
    @maximglobak
    iOS developer
    Если я правильно понял тебя, то тебе нужно закрыть UIViewController изнутри?
    Если так, то можешь попробовать метод
    func dismiss(animated flag: Bool, 
      completion: (() -> Void)? = nil)

    Этот метод говорит контроллеру "закройся". Если у тебя есть navigationController, то можно вызвать метод
    navigationController?.popViewController(animated: true/false)

    В таких случаях контроллер закроется и вылетит из памяти, а при это у него вызовется метод dealloc. Конечно если у тебя нет сильной ссылки на него.
    Ответ написан
    Комментировать
  • Можно ли запустить одно приложение по клику из другого?

    maximglobak
    @maximglobak
    iOS developer
    Можно открывать другие приложения по url scheme. Выглядит это следующим образом
    guard let url = URL(string: "mail://") else { return }
    if UIApplication.shared.canOpenURL(url) {
        UIApplication.shared.open(url, options: [:], completionHandler: nil)
    }

    Но получить список приложений нельзя, но можно попробовать сделать запрос на каждую урл схему из популярных приложений методом
    UIApplication.shared.canOpenURL(url)
    если url можно открыть, то добавляем его в свой список приложений.
    Ответ написан
  • Как скролить экран с расположенным на нем UITableView и другими UIView?

    maximglobak
    @maximglobak
    iOS developer
    Одна из самый интересных тем для UI в iOS - табличная верстка и как ее оптимизировать =)
    каждый элемент оформляй как отдельную ячейку в таблице. Т.Е. вьюху "Заполни профиль" в отдельную ячейку, а "Скачивайте и запускайте приложение… " в отдельную с одним лейблом внутри.
    Дальше эти ячейки распихивай по разным секциям, например секции профиль, акции и футер. (не обязательно их подписывать) и потом для каждой секции и ячейки настраивай свою логику со своими reuseIdentifier и тп.
    Есть несколько страниц на эту тематику, например на Medium и так далее.
    Ответ написан
    1 комментарий
  • UIImage из JSON файла?

    maximglobak
    @maximglobak
    iOS developer
    Вот хороший метод
    guard let url = URL(string: movie.poster) else { return }
    DispatchQueue.global().async {
        if let data = try? Data(contentsOf: url) {
            DispatchQueue.main.async {
                posterImageView.image = UIImage(data: data)
            }
        }
    }

    Он загружает картинку асинхронно и потом выводит на экран.
    Но я бы посоветовал посмотреть в сторону библиотеки Kingfisher , она еще кэширует фотографии и тебе не придется каждый раз делать запрос в сеть, чтоб получить изображение
    Ответ написан
    2 комментария
  • Как лучше реализовать хранение текстовых данных в iOS приложении?

    maximglobak
    @maximglobak
    iOS developer
    Можно в текстовом файле (txt/json), который находится в проекте, а потом читать с него.
    Можно забирать текст с сервера и сохранять его в базу/файл.
    Можно создать отдельный хелпер с текстовыми константами.
    Посмотрите в сторону локализации, там все в "своем" файлике хранится.
    Ответ написан
    Комментировать
  • Как кастомизизировать uitableview на iOS?

    maximglobak
    @maximglobak
    iOS developer
    Если у tableView сделать alpha 0.8, то и ячейки станут полупрозрачными, в том числе и текст на них
    Ты можешь на картинку, которая находится под таблицей наложить вьюху с блюром и потом положить таблицу
    tableView.backgroundColor = [UIColor clearColor];
    потом если ячейка не кастомная, то достаточно будет присвоить прозрачный фон
    cell.backgroundColor = [UIColor clearColor];
    дальше по обстоятельствам.
    Ответ написан
    Комментировать
  • Как вывести метки на карте, сгруппированные по попаданию в определенный радиус?

    maximglobak
    @maximglobak
    iOS developer
    Зависит от карты, которую вы используете.
    А эти группки называются Кластерами. В гугле можно искать по этому тегу.
    1) Можете написать логику самому
    Статья
    2)Apple Map либа
    3)Google maps от гугла
    4)Яндек - тут все печально, будет проще вставить веб вью с JS кодом
    Ответ написан
    Комментировать
  • TapGesture, как определить элемент который нажал, или почему не работает CollectionView при нажатии на ячейку?

    maximglobak
    @maximglobak
    iOS developer
    Для коллекции немного другой делегат, но смысл его в том же.
    Тап гестуре лучше ставить в случае когда тебе нужно тащить эту ячейку куда-то. Т.е. совершать какие-то еще действия (гестуре) с этой ячейкой.
    Если просто нужно кликнуть по ячейке, то лучше использовать делигатный метод
    collectionView:didSelectItemAtIndexPath:
    И все же немного кода для поиска ячейки в коллекции
    //Сначала регистрируешь гестуре, потом определяешь функцию, которую он вызывает и в этой функции пишешь следующее
    //Это точка нажатия относительно коллекции
        CGPoint gestureLocationInCollectionView = [gesture locationInView:self.collectionView];
    
    // А тут находим индекс пас, но при его использовании проверяй всегда есть ли он на самом деле.
        NSIndexPath *indexPathForLocation = [self.collectionView indexPathForItemAtPoint:gestureLocationInCollectionView];
    
    if (indexPathForLocation) {
    //Code here 
    }
    Ответ написан
    Комментировать
  • Выполнить функцию из другой ячейки в UIcollectionView?

    maximglobak
    @maximglobak
    iOS developer
    Если у тебя только две ячейки и ты 100% знаешь которая тебе нужна, то можно достать эту ячейку из массива ячеек у таблицы по нужному индексу
    Пример:
    let indexPath = NSIndexPath(row:1 section:0)
    if let cell = tableView.cellForRow(at: indexPath) as? customCell {
    cell?.label.text = "123"
    }
    Ответ написан
  • Как реализовать popup на iPhone?

    maximglobak
    @maximglobak
    iOS developer
    Для хвостика есть специальный контроллер
    смысл следующий, ты создаешь контроллер свой, который тебе нужно отобразить.
    У него будет следующая проперти
    (myPopoverViewController это твой контроллер, который ты хочешь отобразить внутри поповера)
    myPopoverViewController.modalPresentationStyle = UIModalPresentationPopover;
    выставляешь, как в коде выше
    Потом тебе нужно его показать функцией, которая описана ниже
    [self presentViewController:myPopoverViewController animated: YES completion: nil];

    Дальше ты конфигурируешь поповер контроллер
    UIPopoverPresentationController *presentationController =
    myPopoverViewController.popoverPresentationController;
    Указываешь направления хвостика
    presentationController.permittedArrowDirections =
    UIPopoverArrowDirectionTop;
    Потом в sourceView указываешь из какого вью тебе нужно его показывать, откуда будет расти хвостик
    presentationController.sourceView = myView;
    presentationController.sourceRect = sourceRect;
    Таким образом должно все работать
    Ответ написан
    Комментировать
  • Как сделать чтобы и текст второго label менялся?

    maximglobak
    @maximglobak
    iOS developer
    `tableView.reloadData()`
    Тебе нужно обновить всю таблицу, соответственно нужно вызвать функцию, которая обновляет все ячейки.
    Так же можно обновить все ячейки с анимацией
    `- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation
    `
    не помню как в swift будет.
    Ответ написан
  • Как реализовать авто установки ios приложений?

    maximglobak
    @maximglobak
    iOS developer
    Нельзя.
    Максимум что вы можете сделать - это попросить установить приложение и перейти на страницу в AppStore или на личный сайт приложения. Во вторым случае вы можете сразу запустить скрипт установки, но iOS все равно спросит нужно ли устанавливать данное приложение.
    Ответ написан
    Комментировать