Я уже возился и пытался сделать свое приложение для обмена сообщениями (для практики). Я добавляю обычай UIView
к стандарту UIScrollView
на основе IBAction
.Добавление нескольких подзаголовков в UIScrollView
Каждый раз, когда пользователь нажимает кнопку, я сделать следующее (в порядке убывания):
- Перечислят подвиды в Scrollview и увеличивает значение в целого числа. Я использую это
int
, чтобы установить y-позицию нового пользовательского вида - Создайте пользовательский
UIView
с размером рамки, который изменяется только по ширине. Вид имеетUILabel
поверх него, у которого есть текст. - Создайте новый
CGSize
, который я использую для установкиcontentSize
UIScrollView
. НовыйCGSize
- это ширина прокруткиView + высота пользовательского вида + некоторое дополнение. - Затем я установил contentSize прокрутки.
- Затем я добавляю пользовательский вид в качестве подсмотра scrollView.
Я создал таймер, который добавляет новое сообщение/подвид каждые две секунды, чтобы проверить несколько сообщений и вопрос я вижу, что как только подвиды добавляются за пределами видимой области UIScrollView
, они перестают быть добавлены. Они добавляются только после того, как я верну сообщения обратно в область просмотра, и даже в этом случае они добавляются накладываемые время от времени.
Теперь я знаю несколько вещей: мне нужно добавить subviews в отдельный поток, так как они не будут добавлены во время прокрутки пользователя. Я знаю, что мне нужно будет «очистить» подпункты, поскольку они создаются, так как мое приложение будет продолжать есть память, так как добавляется больше подзаголовков. Я также знаю, что я должен переместить UIScrollView
, поскольку сообщения добавляются, так как нет смысла добавлять их за пределы видимой области. Наконец, я не думаю, что перечисляя подвидов очень элегантно ... так я изменю, что позже ... и не является температура UILabel
я делаю ... Теперь для некоторого кода:
- (void)pushMyMessage:(NSString *)message
{
UILabel *tempLabel = [[UILabel alloc]init];
tempLabel.text = message;
[tempLabel sizeToFit];
//adding the new message as a subview below any previous messages
if (self.messageView.subviews.count > 0)
{
int yIndex = 0;
for (SDMessageView *view in self.messageView.subviews)
{
//increase the y value for the frame of the next message
yIndex += view.frame.size.height;
//add a little padding
yIndex += 5;
}
SDMessageView *newMessage = [[SDMessageView alloc]initWithFrame:CGRectMake(20, yIndex, tempLabel.frame.size.width + 8, tempLabel.frame.size.height) setMessage:message];
CGSize newSize = CGSizeMake(self.messageView.frame.size.width, self.messageView.contentSize.height + newMessage.frame.size.height + 30);
[self.messageView setContentSize:newSize];
[self.messageView addSubview:newMessage];
}
else
{
//initial message
SDMessageView *newMessage = [[SDMessageView alloc]initWithFrame:CGRectMake(20, 20, tempLabel.frame.size.width + 8, tempLabel.frame.size.height) setMessage:message];
CGSize newSize = CGSizeMake(self.messageView.frame.size.width, self.messageView.contentSize.height + newMessage.frame.size.height + 30);
[self.messageView setContentSize:newSize];
[self.messageView addSubview:newMessage];
}
}
Любые идеи о почему подпункты добавляются только во время просмотра? Кроме того, любые идеи о том, как я могу сделать это эффективно?
Спасибо за любую помощь заранее!
Я бы предположил, что вы должны использовать UITableView вместо scrollview, а в ячейке задайте свой вид сообщения, используя табличный вид, будет очень легко управлять интерфейсом. Я нашел некоторые ссылки, на которых вы можете увидеть какое-то приложение для сообщений iOS, такое как пользовательский интерфейс, вы можете его изменить и использовать в соответствии с вашими потребностями. 1) http://maniacdev.com/2013/03/open-source-ios-control-providing-an-easy-to-implement-messages-app-like-user-interface 2) http://maniacdev.com/2012/08/open-source-custom-ios-uitableview-control-for-chat-bubbles-like-the-messages-app –
@VishwaPatel - удивительный. Я займусь этим. –