文档章节

IOS博客项目搭建-16-发微博-点击button获取相册图片

Corwien
 Corwien
发布于 2016/05/27 23:04
字数 889
阅读 42
收藏 1

在上一篇,我们创建了发微博界面的Toolbar,并且可以根据键盘的弹出移动,下面我们给Toolbar上添加按钮,相机、相册、@、#、表情五个按钮,然后添加点击事件,如我们需要获取本地的图片发布在微博上,可以给相册添加点击事件,并通过代理(控制器),打开相册库,然后将选中的图片显示到发微博的界面。

###1、需要添加的按钮

输入图片说明

定义toolbar工具条上的按钮类型,可以用枚举。

IWComposeToolbar.h

//
//  IWComposeToolbar.h
//  ItcastWeibo
//
//  Created by kaiyi on 16-5-15.
//  Copyright (c) 2016年 itcast. All rights reserved.
//

#import <UIKit/UIKit.h>
@class IWComposeToolbar;

// 定义toolbar工具条上的按钮类型,五个按钮===*===
typedef enum {

    IWComposeToolbarButtonTypeCamera,
    IWComposeToolbarButtonTypePicture,
    IWComposeToolbarButtonTypeMention,
    IWComposeToolbarButtonTypeTrend,
    IWComposeToolbarButtonTypeEmotion,
} IWComposeToolbarButtonType;

@protocol IWComposeToolbarDelegate <NSObject>

@optional
-(void)composeToolbar:(IWComposeToolbar *)toolbar didClickedButton:(IWComposeToolbarButtonType)buttonType;

@end
@interface IWComposeToolbar : UIView
@property(weak, nonatomic) id<IWComposeToolbarDelegate> delegate;
@end

###2、在初始化工具条的时候,并添加上边的五个按钮

IWComposeToolbar.m

//
//  IWComposeToolbar.m
//  ItcastWeibo
//
//  Created by kaiyi on 16-5-15.
//  Copyright (c) 2016年 itcast. All rights reserved.
//

#import "IWComposeToolbar.h"

@implementation IWComposeToolbar

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {

        // 1.设置工具条背景图片,平铺
      self.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageWithName:@"compose_toolbar_background"]];
       // self.backgroundColor = [UIColor redColor];

        // 2.添加按钮

         [self addButtonWithIcon:@"compose_camerabutton_background" highIcon:@"compose_camerabutton_background_highlighted" tag:IWComposeToolbarButtonTypeCamera];
        [self addButtonWithIcon:@"compose_toolbar_picture" highIcon:@"compose_toolbar_picture_highlighted" tag:IWComposeToolbarButtonTypePicture];
         [self addButtonWithIcon:@"compose_mentionbutton_background" highIcon:@"compose_mentionbutton_background_highlighted" tag:IWComposeToolbarButtonTypeMention];

         [self addButtonWithIcon:@"compose_trendbutton_background" highIcon:@"compose_trendbutton_background_highlighted" tag:IWComposeToolbarButtonTypeTrend];
         [self addButtonWithIcon:@"compose_emoticonbutton_background" highIcon:@"compose_emoticonbutton_background_highlighted" tag:IWComposeToolbarButtonTypeEmotion];

    }
    return self;
    //
}

/**
 *
 * 添加按钮
 */
-(void)addButtonWithIcon:(NSString *)icon highIcon:(NSString *)highIcon tag:(int)tag
{
    UIButton *button = [[UIButton alloc] init];
    button.tag = tag;
    [button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];
    [button setImage:[UIImage imageWithName:icon] forState:UIControlStateNormal];
    [button setImage:[UIImage imageWithName:highIcon] forState:UIControlStateHighlighted];
    [self addSubview:button];
}

/**
 *
 * 监听按钮点击
 */
-(void)buttonClick:(UIButton *)button{

    // NSLog(@"%d", button.tag);

    if([self.delegate respondsToSelector:@selector(composeToolbar:didClickedButton:)])
    {
        [self.delegate composeToolbar:self didClickedButton:button.tag];

    }

}

/**
 *布局
 */
-(void)layoutSubviews{
    [super layoutSubviews];

    CGFloat buttonW = self.frame.size.width / self.subviews.count;
    CGFloat buttonH = self.frame.size.height;
    for(int i = 0; i < self.subviews.count; i++){
        UIButton *button = self.subviews[i];
        CGFloat buttonX = buttonW * i;
        button.frame = CGRectMake(buttonX, 0, buttonW, buttonH);

    }
}

@end

###3、具体的打开相册的方法,并写将图片显示在imageView ** IWComposeViewController.m**

#import "IWComposeViewController.h"
#import "IWTextView.h"
#import "AFNetworking.h"
#import "IWAccount.h"
#import "IWWeiboTool.h"
#import "IWAccountTool.h"
#import "MBProgressHUD+MJ.h"
#import "IWComposeToolbar.h"

@interface IWComposeViewController ()<UITextViewDelegate,IWComposeToolbarDelegate,UINavigationControllerDelegate,UIImagePickerControllerDelegate>
@property (nonatomic, weak) IWTextView *textView;
@property (nonatomic, weak)IWComposeToolbar *toolbar;
@property (nonatomic, weak)UIImageView *imageView; // [new Add 2016-05-27]
@end

@implementation IWComposeViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    // 设置导航栏属性
    [self setupNavBar];

    // 添加textView
    [self setupTextView];

    // 添加toolbar ****===***
    [self setupToolbar];

    // 添加imageView (初始化) [new Add 2016-05-27]
    [self setupImageView];
}

/**
 *  添加imageView
 */
-(void)setupImageView
{
    UIImageView *imageView = [[UIImageView alloc] init];

    // 设置frame
    imageView.frame = CGRectMake(5, 80, 60, 60);
    [self.textView addSubview:imageView];

    // 赋值属性
    self.imageView = imageView;

}

#pragma mark - toolbar的代理方法
- (void)composeToolbar:(IWComposeToolbar *)toolbar didClickedButton:(IWComposeToolbarButtonType)buttonType
{
    switch (buttonType) {
        case IWComposeToolbarButtonTypeCamera: // 相机
            [self openCamera];
            break;

        case IWComposeToolbarButtonTypePicture: // 相册
            NSLog(@"jinqule");
            [self openPhotoLibarary];
            break;

        default:
            break;
    }
}

/**
 *  打开相机
 */
- (void)openCamera
{
    UIImagePickerController *ipc = [[UIImagePickerController alloc] init];
    ipc.sourceType = UIImagePickerControllerSourceTypeCamera;
    ipc.delegate = self;
    [self presentViewController:ipc animated:YES completion:nil];
}

/**
 *  打开相册
 */
-(void)openPhotoLibarary{
    NSLog(@"打开相册");
    UIImagePickerController *ipc = [[UIImagePickerController alloc] init];
    ipc.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    ipc.delegate = self;
    [self presentViewController:ipc animated:YES completion:nil];
}

/**
 * 图片选择控制器的代理
 */
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    // 1.销毁picker控制器
    [picker dismissViewControllerAnimated:YES completion:nil];

    // 2.获取到的图片
    UIImage *image = info[UIImagePickerControllerOriginalImage];

    // 3.把用户选择的图片显示在发微博编辑框内
    self.imageView.image = image;
    NSLog(@"%@", info);
}

/**
 *  添加Toolbar
 */
-(void)setupToolbar
{
    IWComposeToolbar *toolbar = [[IWComposeToolbar alloc] init];
    toolbar.delegate = self;  // 点击打开图片库的按钮[2016-05-26 00:45 ADD]

    // 设置frame
    CGFloat toolbarH = 44;
    CGFloat toolbarW = self.view.frame.size.width;  // 宽度为view的宽度
    CGFloat toolbarX = 0;   // 位置,在最左边
    CGFloat toolbarY = self.view.frame.size.height - toolbarH; // 无键盘时的toolbar高度
    toolbar.frame = CGRectMake(toolbarX, toolbarY, toolbarW, toolbarH);

    // toolbar的父控件是textview还是控制器?经过分析新浪微博的toolbar,当键盘消失时,toolbar永远在view的最底部
    // 所以,我们确定其父控件为控制器
    [self.view addSubview:toolbar];

    // 赋值属性
    self.toolbar = toolbar;

}

效果: 输入图片说明

注:本博客项目完整源码可以访问我的个人博客获取Corwien博客digtime.cn

© 著作权归作者所有

Corwien
粉丝 27
博文 149
码字总数 115164
作品 0
广州
程序员
私信 提问
Unity与IOS交互,调用IOS系统相机和相册

前面两篇总结了一下unity与android的简单交互和调用安卓系统相机和相册,比较蛋疼的是,后来发现不同的测试机上会有不同的bug。。。下阶段要一个一个的解决一下 今天总结一下与IOS的交互。这...

qq_32587659
2018/05/16
0
0
Phonegap各类商业插件

【Phonegap商业插件服务】[目前插件已经支持到Phonegap最新版本] 1.phonegap-百度社会化分享-andriod插件 v2.0 【该插件支持微信分享和朋友圈分享,qq好友分享,微博分享】 2.phonegap百度社...

夜澜小雨
2015/07/15
1K
0
在手机相册(ios设备相册)中创建相册

这篇博客的主要内容来源于cocoachina 里的贴子,代码能实现在在手机相册(ios设备相册)中创建相册的功能,下面我就原文整理,在扩展一下。 原文地址:http://www.cocoachina.com/bbs/read....

lady-奕奕
2014/05/23
6K
4
fir.im Weekly - iOS 保持界面流畅的技巧

生命不息,coding 不止。本期 fir.im Weekly 收集了微博上的热转资源,包含 Android、iOS 开发工具、源码分享,产品 UI 设计的好文章,还有一些程序员成长的 Tips,希望看完你会有所收获。 ...

风起云飞fir_im
2015/11/16
141
0
使用 Xamarin 开发 iOS 键盘扩展(含网络访问)

版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/...

walter lv
02/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

为什么Netty的FastThreadLocal速度快

前言 最近在看netty源码的时候发现了一个叫FastThreadLocal的类,jdk本身自带了ThreadLocal类,所以可以大致想到此类比jdk自带的类速度更快,主要快在什么地方,以及为什么速度更快,下面做一...

ksfzhaohui
22分钟前
4
0
资治通鉴解析:无论什么条件,要挟权力做出承诺,都会被清算

电影《满城尽带黄金甲》里有句经典的名言“朕赐给你的,才是你的。朕不给你的,你不能抢。”之所以这段话有名,核心的就是,它揭示了这样一个权力心思:无论什么情况,权力的行使,都不愿意受...

太空堡垒185
26分钟前
3
0
CSS技巧之向下箭头

本文转载于:专业的前端网站➫CSS技巧之向下箭头 思路: 使用◇符号(可在输入法的软键盘找到该符号),使用定位选择位置,并隐藏溢出的上半部分 细点: 1.使用i标签的楷体属性把◇变大 2.给i...

前端老手
43分钟前
2
0
SpringCloud alibaba微服务之NACOS多环境配置整合

前言 伴随着spring cloud alibaba 登上主板以后,我就去了解下感觉还是蛮不错的。说实话第一次看见Nacos好长一段时间连读法都不知道...(/nɑ:kəʊs/)。按照官方的话说Nacos是:一个更易于...

攻城狮-飞牛
45分钟前
4
0
tcpdump

tcpdump -A -s0 port 21011 -i any (1)tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型 (2)-i eth1 : 只抓经过接口eth1的包 (3)-t : 不显...

mskk
50分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部