`
haoningabc
  • 浏览: 1482693 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

自制微信的ui

    博客分类:
  • ios
ios 
阅读更多
参考http://ios.9tech.cn/news/2013/1111/38520.html
修改

配置绑定


#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
{
    IBOutlet UITableView *tableViewList;
    IBOutlet UITextField *messageTxt;
}
@property (nonatomic, strong) NSMutableArray *resultArray;
@end


//
//  ViewController.m
//  BubbleDemo
//
//  Created by xiao7 on 14/10/19.
//  Copyright (c) 2014年 killinux. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController
- (IBAction)sendBubbleMessage:(id)sender {
    NSString *thistext = messageTxt.text;
    NSLog(@"sendBubbleMessage:%@",thistext);
    messageTxt.text=nil;
     NSDictionary *dict8 = [NSDictionary dictionaryWithObjectsAndKeys:@"weixin",@"name",thistext,@"content", nil];
    [_resultArray addObject:dict8];
    [tableViewList reloadData];
}

- (void)viewDidLoad {
    [super viewDidLoad];
    NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"weixin",@"name",@"这是一个测试",@"content", nil];
    NSDictionary *dict1 = [NSDictionary dictionaryWithObjectsAndKeys:@"haoning",@"name",@"hello",@"content", nil];

    NSDictionary *dict7 = [NSDictionary dictionaryWithObjectsAndKeys:@"weixin",@"name",@",长数据测试。",@"content", nil];
    
    _resultArray = [NSMutableArray arrayWithObjects:dict,dict1, nil];
    [_resultArray addObject:dict7];

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
//泡泡文本
- (UIView *)bubbleView:(NSString *)text from:(BOOL)fromSelf withPosition:(int)position{
    
    //计算大小
    UIFont *font = [UIFont systemFontOfSize:14];
    CGSize size = [text sizeWithFont:font constrainedToSize:CGSizeMake(180.0f, 20000.0f) lineBreakMode:NSLineBreakByWordWrapping];
    
    // build single chat bubble cell with given text
    UIView *returnView = [[UIView alloc] initWithFrame:CGRectZero];
    returnView.backgroundColor = [UIColor clearColor];
    
    //背影图片
    UIImage *bubble = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:fromSelf?@"SenderAppNodeBkg_HL":@"ReceiverTextNodeBkg" ofType:@"png"]];
    
    UIImageView *bubbleImageView = [[UIImageView alloc] initWithImage:[bubble stretchableImageWithLeftCapWidth:floorf(bubble.size.width/2) topCapHeight:floorf(bubble.size.height/2)]];
    NSLog(@"%f,%f",size.width,size.height);
    
    
    //添加文本信息
    UILabel *bubbleText = [[UILabel alloc] initWithFrame:CGRectMake(fromSelf?15.0f:22.0f, 20.0f, size.width+10, size.height+10)];
    bubbleText.backgroundColor = [UIColor clearColor];
    bubbleText.font = font;
    bubbleText.numberOfLines = 0;
    bubbleText.lineBreakMode = NSLineBreakByWordWrapping;
    bubbleText.text = text;
    
    bubbleImageView.frame = CGRectMake(0.0f, 14.0f, bubbleText.frame.size.width+30.0f, bubbleText.frame.size.height+20.0f);
    
    if(fromSelf)
        returnView.frame = CGRectMake(320-position-(bubbleText.frame.size.width+30.0f), 0.0f, bubbleText.frame.size.width+30.0f, bubbleText.frame.size.height+30.0f);
    else
        returnView.frame = CGRectMake(position, 0.0f, bubbleText.frame.size.width+30.0f, bubbleText.frame.size.height+30.0f);
    
    [returnView addSubview:bubbleImageView];
    [returnView addSubview:bubbleText];
    
    return returnView;
}

//泡泡语音
- (UIView *)yuyinView:(NSInteger)logntime from:(BOOL)fromSelf withIndexRow:(NSInteger)indexRow  withPosition:(int)position{
    
    //根据语音长度
    int yuyinwidth = 66+fromSelf;
    
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.tag = indexRow;
    if(fromSelf)
        button.frame =CGRectMake(320-position-yuyinwidth, 10, yuyinwidth, 54);
    else
        button.frame =CGRectMake(position, 10, yuyinwidth, 54);
    
    //image偏移量
    UIEdgeInsets imageInsert;
    imageInsert.top = -10;
    imageInsert.left = fromSelf?button.frame.size.width/3:-button.frame.size.width/3;
    button.imageEdgeInsets = imageInsert;
    
    [button setImage:[UIImage imageNamed:fromSelf?@"SenderVoiceNodePlaying":@"ReceiverVoiceNodePlaying"] forState:UIControlStateNormal];
    UIImage *backgroundImage = [UIImage imageNamed:fromSelf?@"SenderVoiceNodeDownloading":@"ReceiverVoiceNodeDownloading"];
    backgroundImage = [backgroundImage stretchableImageWithLeftCapWidth:20 topCapHeight:0];
    [button setBackgroundImage:backgroundImage forState:UIControlStateNormal];
    
    UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(fromSelf?-30:button.frame.size.width, 0, 30, button.frame.size.height)];
    label.text = [NSString stringWithFormat:@"%d''",logntime];
    label.textColor = [UIColor grayColor];
    label.font = [UIFont systemFontOfSize:13];
    label.textAlignment = NSTextAlignmentCenter;
    label.backgroundColor = [UIColor clearColor];
    [button addSubview:label];
    
    return button;
}

#pragma UITableView

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return _resultArray.count;
}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSDictionary *dict = [_resultArray objectAtIndex:indexPath.row];
    UIFont *font = [UIFont systemFontOfSize:14];
    CGSize size = [[dict objectForKey:@"content"] sizeWithFont:font constrainedToSize:CGSizeMake(180.0f, 20000.0f) lineBreakMode:NSLineBreakByWordWrapping];
    
    return size.height+44;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }else{
        for (UIView *cellView in cell.subviews){
            [cellView removeFromSuperview];
        }
    }
    NSDictionary *dict = [_resultArray objectAtIndex:indexPath.row];
    
    //创建头像
    UIImageView *photo ;
    if ([[dict objectForKey:@"name"]isEqualToString:@"haoning"]) {
        photo = [[UIImageView alloc]initWithFrame:CGRectMake(320-60, 10, 50, 50)];
        [cell addSubview:photo];
        photo.image = [UIImage imageNamed:@"photo1"];
        
        if ([[dict objectForKey:@"content"] isEqualToString:@"0"]) {
            [cell addSubview:[self yuyinView:1 from:YES withIndexRow:indexPath.row withPosition:65]];
            
        }else{
            [cell addSubview:[self bubbleView:[dict objectForKey:@"content"] from:YES withPosition:65]];
        }
        
    }else{
        photo = [[UIImageView alloc]initWithFrame:CGRectMake(10, 10, 50, 50)];
        [cell addSubview:photo];
        photo.image = [UIImage imageNamed:@"photo"];
        
        if ([[dict objectForKey:@"content"] isEqualToString:@"0"]) {
            [cell addSubview:[self yuyinView:1 from:NO withIndexRow:indexPath.row withPosition:65]];
        }else{
            [cell addSubview:[self bubbleView:[dict objectForKey:@"content"] from:NO withPosition:65]];
        }
    }
    
    return cell;
    
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    
}

@end

  • 大小: 149.7 KB
分享到:
评论

相关推荐

    自制微信(大学生项目)

    【自制微信(大学生项目)】是一个适合大学生进行安卓平台应用开发的项目,旨在模拟微信的基本功能,提供一个学习和实践的平台。这个项目对于初学者来说,是一个很好的起点,可以帮助他们理解和掌握Android应用开发...

    一个自制且无外部依赖的用于原生微信小程序的左右滑动卡片选择喜好的UI组件

    一个自制且无外部依赖的、用于原生微信小程序的左右滑动卡片选择喜好的UI组件。 类似 Tinder、探探 和 Aloha 等软件的社交推荐选择交互操作。 本组件基于原生微信元素和JS实现,不依赖于第三方库。

    微信小程序简单节拍器demo完整源码

    微信小程序提供了丰富的内置组件,如view、button、image等,开发者可以利用这些组件快速构建UI。在节拍器的实现中,可能用到button(用于触发节拍)和audio(播放节拍声音)等组件。 5. **音频处理**: 节拍器的...

    微信表情功能实现

    总的来说,实现微信表情功能涉及了数据结构设计、网络编程、图像处理、UI设计等多个领域,需要开发者具备扎实的编程基础和良好的工程实践。这个资源很可能包含了一些核心的代码示例和指导,帮助开发者理解并实现类似...

    免费领取微信红包封面小程序源码 自定义红包封面小程序源码 流量主广告引流源码

    此小程序适合流量主引流,赚广告费,适合广流量主,适合流量主。 采用云开发,无需服务器,无需域名。小程序里插入banner广告,插屏广告,视频广告,激励式广告。邀请好友获取抽奖机会,或者观看激励式广告获取抽奖...

    集合网上的一些android资源,自制的damo,包括微信分享,图片拼接,视频下载,视频播放

    1. **微信分享**:微信分享是移动应用中常见的社交功能,它允许用户将内容(如文字、图片、链接等)分享到微信朋友圈或与微信好友进行互动。实现微信分享通常需要集成微信SDK,并调用微信提供的API来构建分享内容和...

    微信小游戏好友排行榜快速开发教程

    必然要有好友的战绩比分,然后再做排序,最后将数据呈现在UI上 , 可以分为下面几个步骤: 保存每个用户的分数 获取好友列表,并获取好友的分数 渲染排行榜 (此图片来源于网络,如有侵权,请联系删除! ) 保存每个用户的...

    Android仿 易信 QQ 微信 陌陌 表情

    总之,实现类似易信、QQ、微信、陌陌等应用的表情功能,涉及数据库操作、UI设计、图片处理等多个技术领域,需要综合运用多种Android开发技巧。通过学习和研究`FaceDemo`,开发者可以更好地理解和掌握这一过程。

    美食菜谱.rar

    3. 针对“美食菜谱”主题,可能需要调用微信的API接口,例如上传用户自制菜谱图片,使用wx.chooseImage和wx.uploadFile。 四、事件处理与用户交互 1. 通过绑定事件处理函数,如bindtap、bindinput等,实现用户点击...

    sourcemap2.zip

    【标题】"sourcemap2.zip"是一个包含微信小程序代码的压缩文件,该小程序名为“自制天气预报小程序”,已成功发布并可供用户在微信平台上通过搜索功能直接使用。这个项目利用了百度地图的API来获取和展示天气预报...

    微信小程序 自己制作小组件实例详解

    首先,小组件(Component)是微信小程序提供的一种可复用的 UI 组件,它能够封装特定的功能或者界面,方便在多个页面中进行调用。在项目中,我们可以将一些通用的元素,如导航栏、按钮等封装为组件,以减少代码量,...

    Unity2d-飞刀小游戏源码

    10. **UI设计**:Unity的UI系统(UI Toolkit或旧版Canvas)允许创建各种用户界面元素,如得分显示、游戏提示和按钮。飞刀游戏可能包含一个启动按钮、得分面板和重玩选项。 通过研究这个源码,开发者不仅可以学习到...

    java 电影售票网站源码,自制

    7. **支付集成**: 电影票的购买可能涉及到在线支付,项目可能集成了支付宝、微信支付等第三方支付接口,这需要处理支付回调、事务一致性等问题。 8. **测试与部署**: 使用JUnit进行单元测试,确保代码质量;而...

    ToastNotifications:WPF的Toast通知使您可以在WPF应用程序中创建和显示丰富的通知。 可以使用一组内置选项(例如位置,行为,主题等)进行高度配置。 它是可扩展的,它使您能够以简单的方式创建自定义和交互式通知

    _______ _ _ _ _ _ __ _ _ _ ___ |__ __| | | | \ | | | | (_)/ _(_) | | (_) |__ \ | | ___ __ _ ___| |_| \| | ___ | |_ _| |_ _ ___ __ _| |_ _ ___ _ __ ___ __ __ ) | | |/ _ \ /

    Android 京东商城

    5. **支付集成**:如果要实现在线支付功能,需要集成如微信支付、支付宝等第三方支付SDK,这涉及到安全和交易处理。 6. **推送通知**:为了实时更新订单状态或促销信息,可以集成极光推送、个推等服务,实现消息推...

Global site tag (gtag.js) - Google Analytics