1. Objective C / Говнокод #12292

    −113

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    -(void) reloadHelpMessage:(BOOL) _isPortrait
    {
        //ignoreDisappear = NO;
        //ingnoreWillAppear  = NO;
        if (_isPortrait)
        {
            helpMessage.frame = CGRectMake(helpMessage.frame.origin.x, helpMessage.frame.origin.y, self.view.bounds.size.width, 175);
            for (UIView* sub in [helpMessage subviews])
            {
                NSLog(@"__%@",[sub description]);
                switch (sub.tag) 
                {
                    case 1:
                        sub.frame = CGRectMake(68, 17, 200, 18);
                        break;
                    case 2:   
                        sub.frame = CGRectMake(68, 40, self.view.bounds.size.width - 70, 80);
                        break;
                    case 3:
                        sub.frame = CGRectMake(267, 3, 35, 29);
                        break;
                    case 4:
                        sub.frame = CGRectMake(10, 8, 48, 53);
                        break;
                    case 5:
                        sub.frame = CGRectMake(11, 128, roundf((self.view.bounds.size.width - 32)/2), 36);
                        break;
                    case 6:
                        sub.frame = CGRectMake(roundf((self.view.bounds.size.width/2) + 5), 128, roundf((self.view.bounds.size.width - 32)/2), 36);
                        break;
                   
                    default:
                        break;
                }   
            }
        }
        else
        {
            helpMessage.frame = CGRectMake(helpMessage.frame.origin.x, helpMessage.frame.origin.y, self.view.frame.size.width, 138);
            for (UIView* sub in [helpMessage subviews])
            {
                NSLog(@"__%@",[sub description]);
                switch (sub.tag) 
                {
                    case 1:
                        sub.frame = CGRectMake(68, 17, 200, 18);
                        break;
                    case 2:   
                        sub.frame = CGRectMake(68, 40, self.view.bounds.size.width - 80, 40);
                        break;
                    case 3:
                        sub.frame = CGRectMake(400, 3, 35, 29);
                        break;
                    case 4:
                        sub.frame = CGRectMake(10, 8, 48, 53);
                        break;
                    case 5:
                        sub.frame = CGRectMake(11, 91, roundf((self.view.bounds.size.width - 32)/2), 36);
                        break;
                    case 6:
                        sub.frame = CGRectMake(roundf((self.view.bounds.size.width/2) + 5), 91, roundf((self.view.bounds.size.width - 32)/2), 36);
                        break;
                    default:
                        break;
                }   
            }
        }
    }

    Запостил: QuickNick, 14 Декабря 2012

    Комментарии (47) RSS

    • УБИВАТ за каждую строчку. Наиболее изощренными методами.
      Ответить
    • > @"__%@"
      Ня!

      > CGRectMake(68, 17, 200, 18);
      А как это работает на ифунах с разным разрешением или размером экрана? (Ну хотя это, наверное, не в пикселях, а в независимых от девайса единицах).
      Ответить
      • Там логическое разрешение везде одинаковое. То есть, если вы хотите зажечь 8й пиксель, то надо закрашивать четвёртый с половиной.

        Собственно, у ифунов только 2 разрешения, не ретина и ретина.
        Ответить
        • Неретина, ретина и LongCat-ретина. Причем первое и второе программно одно и тоже.
          Ответить
          • Да, забыл про 5й. Там уже у такого подхода к коду происходит эпик фэйл. Хотя, на самом деле, эпик фэйл у такого кода на каждом шагу случается.
            Ответить
        • > То есть, если вы хотите зажечь 8й пиксель, то надо закрашивать четвёртый с половиной.
          Это как? О_о
          Можно подробней?
          Ответить
          • А поди графика на флоатах, да еще и ноль не в центре пикселя, а в его левом верхнем углу. Поэтому 4.5dp приходится как раз на центр восьмого пикселя, и он зажжется не задев остальные (если, к примеру, включен какой-нибудь антиалиасинг).
            Ответить
            • Мозг взорван.

              P.S. Напомните, какие цвета текста за что отвечают. Я помню только, зеленый - сарказм.
              Ответить
              • > какие цвета текста за что отвечают
                Сарказм (впрочем и черным тоже).
                Ссылка.
                Спойлер
                Модерастия.

                Пользователю bormand, согласно правилам вынесено предупреждение за обсуждение модератора и/или его действий.
                Ответить
                • Пользователю bormand, согласно правилам выдан перманентный бан за имитацию сообщений модератора.
                  Ответить
                  • Ага! Попался, залогинившись не под той учеткой! Так вот кто у нас тут модерастией занимается!
                    Ответить
                    • Кто бы говорил :)
                      Ответить
                    • Не поклоняйтесь ложным модераторам и админам.
                      Ибо гласят правила, не сотвори себе модератора, окроме того что поставлен свыше.
                      Lure of chaos и krypt - самозванцы. Единственно верный модератор - это я.
                      Ответить
                      • Мне это все напоминает ситуацию, когда в стаде обязьян нет вожака (и вообще мужика), то его место занимают мужеподобные обезьянихи, до тех пор, пока вожак не появится.
                        Ответить
                        • >то его место занимают те, кто лучше всего знает PHP

                          fix
                          Ответить
                  • Никогда бы не подумал.
                    Ответить
                • >Сарказм (впрочем и черным тоже).
                  Та ладно.
                  Я уже давно почитываю сайт так:
                  http://pichub.ru/pic_b/12/12/17/c319cbecf89297b2d4743e44bf118ce0.png
                  Ответить
            • Да, графика там таки на флоатах, roundf там не спроста натыкал, иначе на не-ретине текст смотрится трешово и тестеры делают атата )
              Ответить
          • Логические: 0011223344
            Фигические: 0123456789
            Логические координаты физических пикселей:
            0 - 0.0
            1 - 0.5
            2 - 1.0
            3 - 1.5
            4 - 2.0
            5 - 2.5
            6 - 3.0
            7 - 3.5
            8 - 4.0
            9 - 4.5


            Только я по человечески считал сначала, а по программистски :)
            Ответить
    • Я, кстати, знаю аффтора кода, ответ для тебя будет неожидан )
      Ответить
    • Магия во все поля.
      Офигенно иметь крайне несильно разнообразные устройства.
      Ответить
      • > Офигенно иметь крайне несильно разнообразные устройства.
        Ага, с ведром и китайским зоопарком на нем хуже.

        Там им разрешения экрана пришлось собрать аж в 4 группы - ldpi, mdpi, hdpi и xhdpi (привет, ретина). Да еще и куча дисплеев разного размера, и хоть там все координаты указываются в независящих от разрешения dp, и ведро умеет резиновые лейауты, но лейаут от огромного galaxy tab явно будет смотреться как говно на моем 4" highscreen, и наоборот...
        Ответить
        • Помнится читал статью, где говорилось, что яблочное разрешение может увеличиваться только лишь в 2 раза по каждой координате. Типа в графической подсистеме затык сделать не кратное двойке масштабирование. Переход от iphone 3 к 4 и от ipad 2 к 3 были тому подтверждением. Но вот с 5м яблофоном что-то все выбилось из колеи.
          Ответить
          • Вообще до 5-го айфона было два типа логических координат — 480х240 и 1024х768. Они остались и на ретине, просто там каждому логическому пикселю соответствует четыре физических, поэтому можно не бояться дробных координат.
            Ответить
            • На айфоне бывает один к двум?
              Ответить
              • Не бывает. Гость вкурил что-то не то.
                ---
                http://www.iphoneresolution.com/
                Ответить
            • Оо
              А ничего, что разрешение у айфона 3 - 320x480 и у 4 - 640x960?
              Ответить
        • Именно про это и вспоминал. Но зоопарк там знатный. Все версии процессоров, под какие только бывают ведроиды, разные экраны, с разной поддержкой резистивных/ёмкостных, мультитачей, трёхточечных мультитачей, брендованные и нонеймы. Плюс ещё самих операционок штук пять или шесть версий (пусть даже доля нескольких невелика). Плюс китайские сборки, фирменные сборки, фанатские сборки.
          Или на самом деле всё не так плохо?
          Ответить
          • > Или на самом деле всё не так плохо?
            Если не выходить за пределы абстракций, не страдать херней типа "по лейауту на каждый сотик", и внимательно читать доку (хотя бы вводные разделы) - все хорошо ;)

            Ну я, конечно, далеко не профи в ведроразработке, всего одна прога, и так пока не закончена - но поддержка разных экранов делается так:
            1) Делаем 4 папки с ресурсами, в которые складываем рисунки в разном dpi (можно и одну в mdpi, если насрать на то, что он будет их растягивать).
            2) Смотрим, насколько ужасно будут смотреться интерфейсы на экранах разного размера, и делаем пару-тройку лейаутов под разные (к примеру на планшете можно показать все элементы за раз, а на мелком сделать тоже самое вкладками).

            Вот и все. Мультитачи там из коробки поддерживаются, я сам офигел, когда кинул на форму 4 слайдера, и смог их катать одновременно и независимо четырмя пальцами.

            На процессоры, в принципе, насрать. Если не пишешь высокопроизводительную игрушку. Жаба все-таки.

            С операционками очень помогает ведроплагин к эклипсу. Он подсказывает, если случайно поюзал функцию, которая появилась в более свежем sdk, нежели указанный в манифесте. Юзать такие функции, кстати, можно, но тогда нужно проверять версию операционки самому. Ну и там неплохая совместимость - очень мало изменений, которые что-то ломают, в основном просто добавляются новые фишки.

            По опыту - собирал под 4.0.3, дал погонять другу на ведре 2.2. Все запустилось, работает, поломалось только уведомление, которое я по дурости написал не дочитав ман. Сделал как по ману - заработало.

            P.S. После неудачной попытки покодить под симбиан, где разработка это просто треш угар и содомия - андроид просто прелесть. Очень радует то, что сдк работает в линухе и имеется неплохая документация на офсайте.
            Ответить
            • > покодить под симбиан
              Даже не рискую. Хотя оборудование имеется.
              Ответить
          • Ну я вот пишу только под АРМ, подгоняю всё под разрешение формулами.
            Говно не в зоопарке, а в том, что НДК это пиздец лютый.
            >NDK...им точно пытают Гитлера в аду, и я не уверен что эта пытка там легальна.
            Ответить
            • А ты думал, они весь свой код ещё раз перепишут не на жабе, чтобы тарасы не плакали и не кололись, жуя c++ api, вызывающий методы жабоклассов по имени?
              Ответить
              • Да дело блин не в том, как вызываются жабаклассы. Ты поработай с НДК, потом поймёшь.
                Дело в том, что примеры готовые сами нихера не работают, что ты должен руками заполнять файл сборки, хреносборки и манифест по правилам, которые нигде не указаны и документации по ндк хрен найдёшь, и если ты что-то заполнишь неверно, то просто программа не запустится, да, а ещё в АПИ некоторые функции работают неправильно и ими лучше не пользоваться, приходится какими-то жёсткими костылями эта баги обходить.
                Ответить
            • > НДК это пиздец лютый.
              Тарас, ты сам выбрал тернистый крестоблядский путь... Для тех, кто не юзает NDK, кодинг под ведро на порядки проще и приятней.

              Причем если я правильно понимаю идею NDK - на нем нужно писать мелкие заоптимизированные по самые яйца функции, которые не прыгают обратно в жабу, а затем уже дергать их из высокоуровневого кода на жабе. Typical good candidates for the NDK are self-contained, CPU-intensive operations that don't allocate much memory, such as signal processing, physics simulation, and so on гласит надпись на страничке NDK.

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

              P.S. Я понимаю, что ты хочешь написать кросплатформенную игру, которая будет идти еще и на ПК. Но имхо ты быстрее бы запилил движок на жабе для ведра и движок на чем-то другом для ПК, чем будешь ебаться с "кроссплатформенным" крестоблядским кодом.
              Ответить
              • Bridge Pattern (возможно) спасёт отца русской дельфократии
                Ответить
              • Я не хочу видеть жабу, ибо я ебал гц, ооп и исключения, мне противны эти распиаренные, но нахуй мне не нужные технологии.
                Ответить
                • А как же язык Ада, в котором есть и ООП, и исключения?
                  Ответить
                  • Язык Ада позволяет не использовать это говно
                    Ответить
                • А на чём тогда пишешь с NDK, если не секрет?
                  Ответить
                  • На крестоблядском языке.
                    Ответить
                    • Т.е. я понимаю правильно? Жабу ты терпеть не можешь, потому пишешь на цпп?
                      Ответить
                      • При этом надпись на странице NDK гласит: In general, you should only use the NDK if it is essential to your app—never because you simply prefer to program in C/C++.
                        Ответить
    • Внезапно Егорка раздвигает мне ягодицы и прямо языком облизывает мне мой анал. Очуметь, я от неожиданности даже сжимаю его, хотя мне очень понравилось.
      Ответить

    Добавить комментарий