Ответы пользователя по тегу Swift
  • Как установить шрифт для 6 айфона?

    Flanker_4
    @Flanker_4
    Нет, увы, так не получится (надеюсь в июне apple покажут новые size classes)
    Но это можно сделать в коде, использую appearence или subclass для uilabel
    Ответ написан
    7 комментариев
  • Не могли бы подсказать сборщик для IOS8-SWIFT проекта?

    Flanker_4
    @Flanker_4
    Ох Вы и вопрос оформили... хрен поймешь.

    А если по делу, то существует несколько подходов

    1) Таскать в виде файликов. Дешево и сердито, выбор настоящих джедаев (раньше, кста, так и делали)

    2) Использовать чужие наработки в виде lib(в iOS только статические) или Framework'ов. Для этого пункта автор библиотеки должен подготовить их сам.

    3) Использовать гитовские submodule.

    4) Использовать Cocoapods. В двух словах это выглядит так: автор библиотеки публикует ее особым образом. Пользователь программист у себя в специальном файле прописывает нужные ему библиотеки, которые автоматически вытаскиваются и кладутся в проект cocapod'овской тулзой. Название либ можно найти на сайте https://cocoapods.org или непосредственно у автора. При этом вы в любой момент вольны обновить/добавить/удалить все/выбранную библиотеку и, что не маловажно иногда, имеете прямой доступ к исходникам библиотеки. Из минусов - кокаподс немного переделывает проект, что иногда неприемлемо.

    5) Carthage - эдакая помесь 4 и 2 варианта. Т.е. вы избавляетесь от грязной работы по генерации библиотек, но при этом вам прийдется ограничится проектами только под iOS 8. Там используется специальная технология (c) от Apple, которая не работает на старых версиях.

    Что касается позиции Apple - то она предлагает реюзать код используя подход из пункта 2 + для iOS 8 эту же специальную технологию (c). По этому то, эти Carthage и CocoaPod'ы выглядят так странно - они хоть дефакто и стандарт в мире apple разработки, но при этом Apple официально ЕЩЕ не замечены.
    Ответ написан
    1 комментарий
  • Swift фоновое получение данных с сервера?

    Flanker_4
    @Flanker_4
    Да. Вам нужен Background Fetch
    Но только обратите внимание, вы не сможете указать точное время апдейта, а лишь какой-то абстрактное. ОС сама определит когда у нее будут лишнее ресурсы и разбудит ваше приложение на небольшой срок
    Ответ написан
    2 комментария
  • Как перерисовать View из другого потока?

    Flanker_4
    @Flanker_4
    Пока не все ясно. Большая просьба, дайте проект-пример с проблемой
    P.S. Небольшая рекомендация, вот это usleep(40000) не очень круто. Лучше заведите таймер на GCD
    Вот тут с ссылкой на оф. доку

    dispatch_source_t CreateDispatchTimer(uint64_t interval, uint64_t leeway, dispatch_queue_t queue, dispatch_block_t block)
    {
        dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
        if (timer)
        {
            dispatch_source_set_timer(timer, dispatch_walltime(NULL, 0), interval, leeway);
            dispatch_source_set_event_handler(timer, block);
            dispatch_resume(timer);
        }
        return timer;
    }


    Использовать (только заменить queue на вашу)

    dispatch_source_t newTimer = CreateDispatchTimer(1ull * NSEC_PER_SEC, (1ull * NSEC_PER_SEC) / 10, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        // Repeating task
    });
    Ответ написан
  • IOS Swift timeIntervalSince1970 c правильной временной зоной?

    Flanker_4
    @Flanker_4
    Вы совсем не понимаете как "работает время"
    Очень рекомендую найти какую-то доку по NSDate и временными зонами, ознакомится, а потом уже лезть в пекло.
    Но смысл следующий - nsdate всегда хранит "абсолютное" время
    Для вывода в ui одного и того же времени в разных часовых поясах используют nsdateformater
    А то что вы делаете - вкорне неверно. Вы можете описать проблему, котороую пытаетесь решить, зачем вам этот перевод?

    Вот Вам, для познания дзен https://developer.apple.com/library/ios/documentat...
    Смотреть разделы nsdate и time zone
    Ответ написан
    Комментировать
  • Как получить индекс нажатой accessory button?

    Flanker_4
    @Flanker_4
    Я не совсем понимаю, что Вы делаете. В идеале, прикреплять к вопросу проект-пример с демонстрацией проблемы

    Но Вам должно помочь следующее - в методе
    - (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath{}

    "Сохранить" indexPath и вручную вызвать
    [self performSegueWithIdentifier:@"SEGUE_ID" sender:self]; //*

    *Это только если делегат UITableView является UIViewController, а у Вас наверняка так)
    Ну и конечно же, нужно убрать предыдущий performSegue, явный , или тот что вы цепляли в InterfaceBuilder'e
    Ответ написан
    1 комментарий
  • Как совершить действие в заданное время?

    Flanker_4
    @Flanker_4
    К сожалению нет. Но возможно есть кастомные реализации подобного sheduler'а

    В iOS очень сложно с работой в фоне+приложение может быть выгружено в любой момент пользователем. Самый идеальный вариант - реализовать подобную логику на сервере, и , воспользовавшийсь какой либо очередью сообщений (rabbit mq там) +remote push notification, уведомить клиента о наступлении события

    Но если с сервером проблемы, то вручную это делается следующим образом:
    1) Определить дату и время срабатывания
    2) Завести таймер NSTimer с этой датой, там есть метод initWithFireDate(точно не помню), указав селектор(метод) для срабатывания
    3) при уходе приложения в фон остановить таймер
    4) при возвращении приложения из фона или при запуске - проверить , больше ли текущее время за запланированное в пункте 1 . Если да, то выполнить предпологаемую логику, если нет - то выполнить пункт 2.

    Для того, что бы пользователь не проморгал момент наступления события, можно бросать/шедулить локальные нотификации UILocalNotification- в этом случае, если приложение будет в фоне, пользователь увидет пуш и если это что то важное для него - запустит приложение и кинет вас в пункт 4
    Ответ написан
    1 комментарий
  • Как привязать UIViewController к IBOutlet'у родительского контроллера?

    Flanker_4
    @Flanker_4
    Я такое не реализовывал , но в интернете подсказывают что это можно попробовать реализовать через кастомные segue

    https://orderoo.wordpress.com/2012/02/23/container...
    sandmoose.com/post/35714028270/storyboards-with-cu...
    Ответ написан
  • Селекторы в Objective-c?

    Flanker_4
    @Flanker_4
    Селектор - это "название" метода. А по факту просто строка.
    Классический пример: есть класс NSString и NSNumber. У каждого из них есть методы intValue (методы разные, как понимаете), но при этом, объекты как первого класса , так и второго будут реагировать на один и тот же селектор @selector(intValue)
    для полноты картины, лучше посмотреть на apple доки
    https://developer.apple.com/library/mac/documentat...
    https://developer.apple.com/library/mac/documentat...
    Ответ написан
    1 комментарий
  • Swift - Как оптимизировать "нарезку" изображения?

    Flanker_4
    @Flanker_4
    Вы делаете не то и не в том месте.
    scrollViewDidScroll вызывается очень часто. При скролинге на 10 px он дернется 10 раз (ну почти, там своя специфика). А Вы еще и заливаете это соусом очередей, а уж если очередь асинхронная - то вообще шляпа , вы получите на те же 10 пикселей 10 операций генерации картинок

    Вам нужно либо взять эту большую картинку, обернуть в UIImageView , и вставить в uiscrollview как subview. Картинки высотой до 2к без проблем будут скролится.
    Если картинка ну чертовски большая, от 5к и больше - то тут нужно резать, но не так как Вы.
    Делаете две UIImageView определенного размера (ну к примеру 1.5x-2x высоты экрана девайса) и вставляете как выше как сабвью, когда пользователь доскраливает до половины этой картинки (это отслеживаете в didScroll) запускаете генерацию следующей порции картинки, вставляете ее в uiimageview и пихаете под первую. Когда пользователь доскролит - картинка догенерируется и для пользователя это будет выглядить безшовно. Если пользователь начинает скролить дальше - выдираете первый imageView , перегенирируете ему изображение и вставляете ниже . Вообщем две плиточки перекладываете по ходу скрола пользователя.
    Ответ написан
    Комментировать
  • Можно ли изменять(задавать) значение переменной в функции делегата в Swift?

    Flanker_4
    @Flanker_4
    Насколько мне помнится, NSXMLParser не асинхронный, и если Вы вызываете parse в главном потоке - то установка label пройдет нормально. Но опять же, раз он асинхронный и Вы ему скармливаете жирную xml - он вешает ui шный поток и по этому у вас label (да не только она, а все ui висит) обновляется через время. Вам нужно либо запустить парсер асинхронно (см. примеры stackoverflow.com/questions/2862911/is-nsxmlparser... или использовать другой, более удобный парсер (www.raywenderlich.com/553/xml-tutorial-for-ios-how... NSXMLParser имеет чертовски неудобный интерфейс, как по мне. В своих проектах лично я использую гугловский. Ах да, если все же решите асинхронно вызывать парсер - не забудьте вернуться в ui поток перед установкой label
    Ответ написан
    Комментировать
  • Как вернуть возможность русскоязычного ввода в приложениях на swift в xcode 6.1 (iOS Simulator) ?

    Flanker_4
    @Flanker_4
    Серьезно?

    У вас сбросился симулятор, нужно в нем войти в настройки девайса (симулятора) и добавить русскую клавиатуру в основных настройках, ну или же переключить там же на русский язык(клавиатура добавится сама)
    Ответ написан
  • Как выполнить цикл дочерних значений?

    Flanker_4
    @Flanker_4
    Я не вижу смысла удалять все subviews и у дочерних элементов, имхо хватит только верхнего , т.е. что-то такое
    [view.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
    Но если нужно уж все то как-то так.
    -(void) removeSubviews:(UIView*) view{
         for (UIView *child in view.subview){
               [self removeSubviews:child];
         }
         [view.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
    }
    Ответ написан
    4 комментария
  • Как с помощью Swift перевести строку содержащую двоичное число в шестнадцатеричное число?

    Flanker_4
    @Flanker_4
    Собрать из строки число можно старым дедовским способом
    Ну вот как тут stackoverflow.com/questions/6496561/convert-string...

    Ну а дальше просто с помощью StringWithFormat и спецификатора %x stackoverflow.com/questions/5473896/objective-c-co...
    Получить хек совой значение. вопрос лишь в том, насколько большое у вас изначально число
    Ответ написан
    Комментировать
  • Как сделать переключатель между UITableView и UICollectionView?

    Flanker_4
    @Flanker_4
    тут не нужна uitableview
    все делается средствами uicollectionview
    почитайте поподробней документацию. если не вдаваться в детали, то Вам нужно объявить два lyouta collection view, один списковой, второй плиточный. и при изменении отображения выбирать нужный layout через setCollectionViewLayout:

    https://developer.apple.com/library/ios/documentat...
    Ответ написан
    Комментировать
  • Автодополнение в Xcode6?

    Flanker_4
    @Flanker_4
    Оно просто глючит, перезапуск хкода лично у меня решал эту проблему. Там вышла вторая бэта, попробуйте ее
    Ответ написан
    Комментировать