麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

XMPP鍵盤訂制實現圖文混排

2019-11-14 18:36:52
字體:
來源:轉載
供稿:網友

  在現階段的通信服務中,各種標準都有,因此會出現無法實現相互連通,而XMPP(Extensible Message and PResence Protocol)協議的出現,實現了整個及時通信服務協議的互通。有了這個協議之后,使用任何一個組織或者個人提供的即使通信服務,都能夠無障礙的與其他的及時通信服務的用戶進行交流。例如google 公司2005年推出的Google talk就是一款基于XMPP協議的即時通信軟件。在前面的系列博文中,我們介紹了XMPP的詳細使用(查看系列文章:http://www.companysz.com/jerehedu/p/4607599.html),下面我們就談論一下如何簡單的使用XMPP的鍵盤訂制:

  1、首先增加鍵盤的自定義小圖標和彈出效果

  效果圖如下:

#pragma mark  - 排列按鈕- (void) setUpSubviews{        //1 初始化圖片名稱    NSArray* array=@[@"compose_camerabutton_background_os7",@"compose_toolbar_picture_os7",@"compose_mentionbutton_background_os7",@"compose_trendbutton_background_os7",@"compose_emoticonbutton_background_os7"];        //2 排列按鈕    CGFloat space=(kWidth-kMargin*2-kItemNum*kItemWidth)/(kItemNum-1)+kItemWidth;        for (int i=0; i<kItemNum; i++) {                UIButton * button=[UIButton buttonWithType:UIButtonTypeCustom];        button.tag=i;        button.frame=CGRectMake(kMargin+i*space, self.frame.size.height/2.0-kItemHeight/2.0, kItemWidth, kItemHeight);        //        button.backgroundColor=JRRandomColor();        [button setBackgroundImage:[UIImage imageNamed:array[i]] forState:UIControlStateNormal];                //Actions 按鈕事件        [button addTarget:self action:@selector(btClick:) forControlEvents:UIControlEventTouchUpInside];        [self addSubview:button];    }  }/增加鍵盤事件彈出通知監控    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyUp:) name:UIKeyboardWillShowNotification object:nil];        //增加鍵盤事件消失通知監控[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyDown:) name:UIKeyboardWillHideNotification object:nil];#pragma mark - 鍵盤升起來- (void) keyUp:(NSNotification *) notification{        //獲取動畫的時間    CGFloat animaTime=[notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] floatValue];        //獲取鍵盤的尺寸(用來確定動畫的范圍)    CGRect frame=[notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];        //控制鍵盤動畫    [UIView animateWithDuration:animaTime animations:^{        self.keyaccess.transform=CGAffineTransformMakeTranslation(0, frame.size.height*-1);    }];            }#pragma mark - 鍵盤落下去- (void) keyDown:(NSNotification *) notification{        //獲取動畫的時間    CGFloat animaTime=[notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] floatValue];        [UIView animateWithDuration:animaTime animations:^{        self.keyAccess.transform=CGAffineTransformIdentity;    }];    }

  2、定義自定義鍵盤的圖標

  表情主要分為三塊默認,Emoji,浪小花,默認和浪小花為圖標,而Emoji為字符,因此我們需要進行特殊處理。效果圖如下:

  代碼如下:

  1、我們首先自定義鍵盤視圖,同時我們需要把表情抽取出來因此還需要自定義一個滾動表情視圖

  //增加滾動表情        [self setUpSrollEmotion];                //增加自定義的tab        [self setUpTab];                //設置默認第一個        if (self.btArray.count>1) {            [self clickBt:self.btArray[1]];            self.emotionScroll.emotionArray=self.defaultArray;        }else{            [self clickBt:[self.btArray firstObject]];        }pragma mark - 自定義鍵盤布局#pragma mark 設置滾動表情- (void) setUpSrollEmotion{    JRScrollEmotion * scroll=[[JRScrollEmotion alloc] initWithFrame:CGRectMake(0, 0, kWidth, self.frame.size.height-44)];    self.emotionScroll=scroll;        scroll.emotionArray=nil;    [self addSubview:scroll];        }#pragma mark 增加tab- (void) setUpTab{        UIView * bgview=[[UIView alloc] initWithFrame:CGRectMake(0, self.frame.size.height-44, kWidth, 44)];    bgview.backgroundColor=JRColor(109, 109, 109);    [self addSubview:bgview];        //計算按鈕寬度    CGFloat width=kWidth/4.0;    //標題數組    NSArray * array=@[@"最近",@"默認",@"Emoji",@"浪小花"];        for (int i=0 ; i<4; i++) {        UIButton * button=[[UIButton alloc] initWithFrame:CGRectMake(i*width, 0, width, 44)];        button.tag=i;        [button setTitle:array[i] forState:UIControlStateNormal];        [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];        [button addTarget:self action:@selector(clickBt:) forControlEvents:UIControlEventTouchUpInside];        [self.btArray addObject:button];        [bgview addSubview:button];            }        }

  2、第二步我們需要進行對表情進行循環布局,每個表情作為一個button,我們進行循環擺放

-(void)setEmotionArray:(NSArray *)emotionArray{    _emotionArray=emotionArray;        //移除所有button    [self.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];        //計算總頁數    NSInteger totalPage=ceil(self.emotionArray.count/23.0);    self.contentSize=CGSizeMake(totalPage*kWidth, 0);    CGFloat hspace=(kWidth-40-8*35)/7.0+35;    CGFloat vspace=(self.frame.size.height-20-3*35)/2.0+35;        for (int i=0; i<self.emotionArray.count; i++) {        NSInteger nowPage=[self getNowPageWith:i];                NSInteger col=(i-nowPage*23)%8;        NSInteger row=(i-nowPage*23)/8;                UIButton *button=[[UIButton alloc ] initWithFrame:CGRectMake(nowPage*kWidth+20+col*hspace, 10+row*vspace, 35, 35)];                        //根據表類型設置圖片        JREmotionModel * model=self.emotionArray[i];                if (model.imageName==nil) {//emoji表情            [button setTitle:model.emoji forState:UIControlStateNormal];            button.titleLabel.font=[UIFont systemFontOfSize:35];        }else{          [button setImage:[UIImage imageNamed:model.imageName] forState:UIControlStateNormal];        }                //監控點擊事件        button.tag=i;        [button addTarget:self action:@selector(emotionClick:) forControlEvents:UIControlEventTouchUpInside];        [self addSubview:button];            }               for (int i=0; i<totalPage; i++) {                //增加刪除按鈕        UIButton *button= [UIButton buttonWithType:UIButtonTypeCustom];                if (i<totalPage-1) {            button.frame=CGRectMake(kWidth-35-20+i*kWidth, vspace*2+10, 35, 35);        }else{            //獲取剩下的個數            NSInteger numLeft= self.emotionArray.count-i*23;            NSInteger row=(numLeft)/8;            NSInteger col=(numLeft)%8;            button.frame=CGRectMake(i*kWidth+20+hspace*col, 10+vspace*row, 35, 35);        }                //====        [button setImage:[UIImage imageNamed:@"compose_emotion_delete_highlighted"] forState:UIControlStateNormal];                [button addTarget:self action:@selector(emotionDelete) forControlEvents:UIControlEventTouchUpInside];        [self addSubview:button];        }      }

  3、我們需要進行圖文混排將信息展示到文本框

    ①當點擊表情的時候我們需要發送通知,告訴接受者

#pragma mark - 表情點解- (void) emotionClick:(UIButton *) button{    //獲取對應的表情模型    JREmotionModel *model=self.emotionArray[button.tag];        //發送通知    [[NSNotificationCenter defaultCenter] postNotificationName:AddEmotionNotification object:nil userInfo:@{@"emotion":model}];

    ②接收到通知后通過富文本技術進行顯示

- (void)addEmotion:(NSNotification * ) notification{       JREmotionModel * model= notification.userInfo[@"emotion"];               //如果是Emoji表情直接插入文本即可    if (model.imageName.length==0) {        [self.tf insertText:model.emoji];    }else{        //獲取之前的文本        NSAttributedString * text=self.tf.attributedText;                //將之前的文本包含進去        NSMutableAttributedString * attr=[[NSMutableAttributedString alloc] initWithAttributedString:text];                //記錄當前的位置        NSInteger index;                //如果是圖片表情,需要重新初始化一個附件,并設置圖片然后拼接        JRTextAttachMent * temAttch=[[JRTextAttachMent alloc] init];        temAttch.model=model;        temAttch.bounds=CGRectMake(0, -2.5, self.tf.font.lineHeight-5, self.tf.font.lineHeight-5);        temAttch.image=[UIImage imageNamed:model.imageName];                NSAttributedString * tempStr=[NSAttributedString attributedStringWithAttachment:temAttch];                //保存一下之前的位置        index=self.tf.selectedRange.location;        [attr insertAttributedString:tempStr atIndex:index];                //重新給文本框賦值        [attr addAttribute:NSFontAttributeName value:self.tf.font range:NSMakeRange(0, attr.length)];        self.tf.attributedText=attr;        self.tf.selectedRange=NSMakeRange(index+1, 0);    }     }

 

  想要了解更多內容的小伙伴,可以點擊查看源碼,親自運行測試。

  疑問咨詢或技術交流,請加入官方QQ群:JRedu技術交流 (452379712)

 

作者:杰瑞教育
出處:http://www.companysz.com/jerehedu/ 
本文版權歸煙臺杰瑞教育科技有限公司和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 在线成人一区二区 | 欧美日韩爱爱视频 | 天天透天天狠天天爱综合97 | 久久久久国产成人免费精品免费 | 爱爱视频天天干 | 国产日韩在线观看视频 | 毛片免费视频网站 | 香蕉国产片 | 亚洲欧美一区二区三区在线观看 | 深夜免费视频 | 精品国产91久久久久久久妲己 | 美女又黄又www | 亚洲第一成网站 | 久综合色| 中文字幕在线永久视频 | 一区二区三区视频在线观看 | 免费性爱视频 | 禁漫天堂久久久久久久久久 | 羞羞羞网站 | 美女网站黄在线观看 | 免费99热在线观看 | 亚洲生活片 | 龙的两根好大拔不出去h | 亚洲精品 欧美 | 国产日韩线路一线路二 | 高潮娇喘嗯啊~文字 | 黄色a级片视频 | 玩偶姐姐 在线观看 | 亚洲片在线 | 羞羞的视频免费在线观看 | 免费国产视频大全入口 | 成人一级黄色大片 | 羞羞网站入口 | 欧美精品一区二区久久 | 久久男 | 91www成人久久 | 久久这| 成人免费福利视频 | 亚洲天堂一级片 | 毛片在线视频在线播放 | 91av网址 |