Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Перелистывание текста на экранах.

Здравствуйте. Простите, только начинаю изучать, поэтому с терминологией пока проблемы. Надеюсь поймёте.

Ситуация примерно такая... Есть View Controller на котором расположен текст. Вокруг всякая мишура (оформление). Хотелось бы, чтобы при проведению пальцем по экрану (слева направо), текущий текст улетал, а появлялся новый. Из массива или БД - не важно. 

Так как я начинающий, то посмотрел некоторые записи, посты и т.д. и сделал два View Controller'a, которые связал через Swipe и вроде как задача частично решилась. Частично, потому как там перелистывание не такое. Но два View Controller'a это не то. Гипотетически, массив строк может включать и 200 строк, поэтому делать для каждой строки свой View Controller кажется глупостью. Отсюда и вопрос. Как можно скролить строки (TextView) горизонтально? По сути человек должен увидеть примерно так: 
текст1 -> махнул пальцем справо-налево -> текст2 -> махнул пальцем справо-налево -> текст 3 -> махнул пальцем слева-направо -> текст2 (то есть вернулись на 1)


Поясните пожалуйста или ссылки какие-то киньте. 

Благодарю.
Ответ:
Мне помогло) спасибо)
Вопрос: Пляски вокруг UILabel (как нормально настроить перенос текста?)

Всем привет, существует задача - один вью контроллер с одной UILabel на нем. Текст этого лейбла динамически изменяется, должно быть всегда на весь экран девайса крупно его видно. Привязки UILabel стоят к центру по вертикали и горизонтали вьюхи, а также Equal Widths с вьюхой. Размер текста 250 для айпадов и 150 для айфонов, также стоит атрибут Autoshrink -> Maximum Font Scale (0.4) для сжатия размера текста в зависимости от количества символов.

Все проблемы начинаются с изменением количества Lines (строк) в UILabel. То есть, например, если поставить количество строк 3, то надпись "непереносимая невыносимость бытия" выглядит хорошо:
Кликните здесь для просмотра всего текста

Пляски вокруг UILabel (как нормально настроить перенос текста?)


А вот "ощущение безысходности" - уже не очень:
Кликните здесь для просмотра всего текста

Пляски вокруг UILabel (как нормально настроить перенос текста?)


Этой надписи гораздо комфортнее было бы со значением Lines - 2:

Кликните здесь для просмотра всего текста

Пляски вокруг UILabel (как нормально настроить перенос текста?)


То есть, при фиксированном количестве строк в зависимости от длины текста возникают уродливые переносы слов (ладно бы по правилам) и это очень печалит.
Как бы сделать так, чтобы, например, количество строк выставлялось в зависимости от количества слов, или просто отменить эти уродские переносы принудительно заставляя вывести минимум одно слово в строку? (пробовал играться с параметром Line Breaks - никакого эффекта(( )
Ну или посоветуйте, может, какое-нибудь другое решение, главное, чтобы текст читался и был крупным.
Заранее большое спасибо за любую попытку помочь)
Ответ: таак, уже почти добился, чего хотел, но почему-то не работает в портретной ориентации (в ландшафтной все ок). может, подскажете, чего я не замечаю?

Label на вьюхе один (pickupLabel), привязки - equal widths и equal heigths с view.

переделанная функция под Swift:
Кликните здесь для просмотра всего текста
Код Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
    func getSizeForText(text: NSString, maxWidth: CGFloat, fontName: String, fontSize:CGFloat) -> CGSize {
        var constraintSize: CGSize = CGSizeZero
        
        constraintSize.height = CGFloat.max
        constraintSize.width = maxWidth
        let attributesDictionary: NSDictionary = NSDictionary(objectsAndKeys: UIFont(name: fontName, size: fontSize)!, NSFontAttributeName)
        
        let frame: CGRect = text.boundingRectWithSize(constraintSize, options: NSStringDrawingOptions.UsesLineFragmentOrigin, attributes: attributesDictionary, context: nil)
        
        let stringSize:CGSize = frame.size
        return stringSize
        
    }


viewDidLoad:
textFromInput - это строка со словами
Кликните здесь для просмотра всего текста
Код Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
override func viewDidLoad() {
        super.viewDidLoad()
 
    
 
let words = textFromInput.componentsSeparatedByString(" ")
 
let longest = words.reduce(String?()) {
    (longest, word) in
    longest == nil || countElements(word) > countElements(longest!) ? word : longest
   
}
 
    var maxs: CGSize = CGSizeZero
    var fontSize: CGFloat = 10
    do {
    fontSize++
    maxs = self.getSizeForText(longest!, maxWidth: CGFloat.max, fontName: "Helvetica", fontSize: fontSize)
    } while maxs.width < pickupLabel.frame.size.width
    
    
    pickupLabel.text = textFromInput
    pickupLabel.font = UIFont(name: "Helvetica", size: fontSize)
    pickupLabel.numberOfLines = 0
    
    println("Самое длинное слово: \(longest!)")
    println("Искомый максимальный размер шрифта: \(Int(fontSize))")
    println("Ширина рамки Label: \(pickupLabel.frame.size.width)")
    println("Ширина рамки View: \(self.view.frame.size.width)")
}

И что получается:

в портретной:
Кликните здесь для просмотра всего текста
Пляски вокруг UILabel (как нормально настроить перенос текста?)


в ландшафтной:
Кликните здесь для просмотра всего текста
Пляски вокруг UILabel (как нормально настроить перенос текста?)


пробовал сравнивать maxs с self.view.frame.size.width - но почему-то тоже ничего не получается(
Вопрос: Диагональ экрана для iOS разработчиков

Всем привет. Хочу прикупить imac, стоит вопрос не столько в начинке сколько в диагонали экрана. Расскажите кто на чем пишет, достаточно ли 21 дюйма для комфортной работы, болят ли глаза от 27 дюймов? Заранее благодарее.
Ответ: уже года два на 13дюймовом макбуке
Вопрос: Экран загрузки, мобильное приложение iOS/Android

Здравствуйте! Подскажите, экран загрузки приложения, хочу сделать анимацию (gif, apng, mng) при загрузки приложения для iOS/Android. Будет ли это работать, какие есть решения?
Ответ:
Вопрос: Черный экран при смене представления в эмуляторе

Есть 2 представления - книжное и альбомное. При запуске отображается книжное представление. При смене представления с книжного на альбомное (cmd + right) - отображается черный экран. Что не так?

Код

//
//  ViewController.h
//  swap3
//
//  Created by 0xdeadc0de on 05.04.14.
//  Copyright (c) 2014 0xdeadc0de. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@property (strong, nonatomic) IBOutlet UIView *portrait;
@property (strong, nonatomic) IBOutlet UIView *landscape;
@end


Код

//
//  ViewController.m
//  swap3
//
//  Created by 0xdeadc0de on 05.04.14.
//  Copyright (c) 2014 0xdeadc0de. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#define degreesToRadians(x) (M_PI * (x) / 180)

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    if (toInterfaceOrientation == UIInterfaceOrientationPortrait) {
       
        self.view = self.portrait;
        self.view.transform = CGAffineTransformIdentity;
        self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(0));
        self.view.bounds = CGRectMake(0.0, 0.0, 320.0, 460.0);
        
    } else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) {
       
        self.view = self.landscape;
        self.view.transform = CGAffineTransformIdentity;
        self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(-90));
        self.view.bounds = CGRectMake(0.0, 0.0, 480.0, 300.0);
        
    } else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) {
        
        self.view = self.landscape;
        self.view.transform = CGAffineTransformIdentity;
        self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(90));
        self.view.bounds = CGRectMake(0.0, 0.0, 480.0, 300.0);
   
    }   
}
@end

Ответ:
жалко
Вопрос: Как сделать строку с несколькими одинаковыми по ширине Label, чтобы они масштабировались в зависимости от ширины экрана?

Я добавил несколько Label на View. У всех выставляю констрейны: левый 0, правый 0 и ширину.
Затем программно беру ширину экрана, делю на количество Label, и каждому констрейну ширины выставляю полученное значение. Можно ли сделать проще? Без программного выставления констрейнов.
Ответ: Alex_Y, используй UIStackView
Вопрос: Зашифровать данный текст, используя таблицу ASCII-кодов

1. Зашифровать данный текст, используя таблицу ASCII-кодов:
Информатика

Решение – 136 173 228 174 224 172 160 226 168 170/

Скажите правильно ли решение ?
Если нет объясните что я не так сделал ?
Ответ: Проверьте по таблице:
http://www.ascii-codes.com/cp866.html
Вопрос: Текст в таблице при первом запуске

Вечер добрый. Приложение при первом запуске скачивает из инета данные. Мне бы хотелось что бы при первом запуске приложения в первой ячейке таблицы показывался текст "Loading...". Вот как это сделать? В метод cellForRowAtIndexPath заходит только когда данные уже получены, соответственно там проверка пуст источник данных или нет не работает.
Ответ:
Цитата Сообщение от Slava-hacker32 Посмотреть сообщение
В метод cellForRowAtIndexPath заходит только когда данные уже получены
это как еще?
в этот метод таблица стучится сразу же, как только поймет сколько ячеек нужно отрисовать

соответственно в реализации метода делегата датасорса (numberOfRowsInSection) вы возвращаете 1 и в cellForRowAtIndexPath рисуете "Loading..."

когда данные подгрузились, в numberOfRowsInSection вы возвращаете кол-во айтемов и в cellForRowAtIndexPath, соответственно, рисуете нужный айтем
Вопрос: Как поймать момент, когда ячейка UITableView показалась на экране?

начал для этого использовать tableView:willDisplayCell:forRowAtIndexPath:
но если там сделать [tableView cellForRowAtIndexPath:indexPath] то ячейку мы не получим, получается её ещё нет в таблице
Ответ: когда ячейка отобразилась на экране
я по indexPath ячейки получаю id материала
и добавляю в очередь загрузку картинки для материала с данным id
когда подходит очередь картинки надо проверить есть ли эта ячейка на экране и изменить на ней индикатор загрузки

Добавлено через 1 минуту
из-за того что очередь подходила раньше раньше отображения картинки, то не где было менять индикатор

Добавлено через 45 секунд
но я уже это переделал, теперь индикатор меняется в модели
Вопрос: Симулятор выдаёт результат в половину экрана

Выглядит это примерно так
Ответ: Size classes не ориентированны под четверку.
Либо отключай их, либо, если хочешь поддерживать сразу все экраны, гугли что такое autolayout - технология достаточно простая.