将Cell中的视图取出传递到根视图
当我们点击Cell中的某个图片时,图片会有一种从Cell中取出,放大,然后再回到原来的Cell中的效果。我的想法是:当Cell中的图片用button 来显示。当我们点击Cell中的这个button的时候,button触发方法以代理的方式将button的图片和这个Cell 传递到视图控制器。视图控制器通过坐标转换,得出图片在屏幕的位置坐标,然后保存这个位置并根据这个Frame在主视图创建一个ImageView。控制这个imageView的位置变化即可达到取出放大退回原有位置的效果。
//
// MyCell.h
// 自定义Cell
//
// Created by 邓竹立 on 15-3-18.
// Copyright (c) 2015年 邓竹立. All rights reserved.
// #import <UIKit/UIKit.h> @protocol MyCellDelagate <NSObject> -(void)image:(UIImage *)image rect:(CGRect) rect from:(UIView*)view; @end
@interface MyCell : UITableViewCell
@property (weak, nonatomic) UIButton *iconButton;
@property(nonatomic,weak)id<MyCellDelagate> myDelgate; +(instancetype)cellWithTableView:(UITableView *)tableView; @end
//
// MyCell.m
// 自定义Cell
//
// Created by 邓竹立 on 15-3-18.
// Copyright (c) 2015年 邓竹立. All rights reserved.
// #import "MyCell.h" @interface MyCell () @end @implementation MyCell - (void)clickIconButton:(UIButton *)sender
{
[self.myDelgate image:sender.imageView.image rect:sender.frame from:self.contentView];
} +(instancetype)cellWithTableView:(UITableView *)tableView
{
static NSString *reuseId=@"cell";
MyCell *cell=[tableView dequeueReusableCellWithIdentifier:reuseId];
if (!cell)
{
cell=[[MyCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseId];
} UIButton *button=[[UIButton alloc]init]; cell.iconButton=button;
button.frame=CGRectMake(0, 0, 120, 120); [cell.iconButton setImage:[UIImage imageNamed:@"DSC00003.jpg"] forState:UIControlStateNormal];
[cell.iconButton addTarget:cell action:@selector(clickIconButton:) forControlEvents:
UIControlEventTouchUpInside];
[cell.contentView addSubview:button];
return cell;
} @end
#import "ViewController.h"
#import "MyCell.h"
@interface ViewController ()<UITableViewDataSource,UITableViewDelegate,MyCellDelagate>
@property (weak, nonatomic) IBOutlet UITableView *tableView; @end @implementation ViewController - (void)viewDidLoad
{
[super viewDidLoad]; self.tableView.delegate=self;
self.tableView.dataSource=self;
self.tableView.allowsSelection=NO;
}
-(void)image:(UIImage *)image rect:(CGRect)rect from:(UIView *)view
{
UIImageView *imageView=[[UIImageView alloc] init];
CGRect rect1=[view convertRect:rect toView:self.view]; imageView.frame=CGRectMake(rect1.origin.x+100, rect1.origin.y+100, rect1.size.width, rect1.size.height);
imageView.image=image;
[self.view addSubview:imageView];
} -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 5;
} -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
MyCell *cell=[MyCell cellWithTableView:tableView];
cell.myDelgate=self; return cell;
} -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 200;
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} @end
将Cell中的视图取出传递到根视图的更多相关文章
- Revit中如何将视图过滤器传递到其它项目
在Revit中采用过滤器控制视图显示,利用过滤器给图元着色,利用过滤器控制视图显示或隐藏等,那么,在不同的项目中是否每次都要设置相同的过滤器,其实,Revit提供了这么一种在不同项目传递信息的方式,在 ...
- 关于cell中添加子视图 复用重叠问题的解决方法
问题本质: 因为你要添加的子视图并不是在自定义的cell中实现的,而是根据系统给的UITableViewCell这个类创建的实例,每次进图 cellForRow方法都会创建一个cell,每次都要创 ...
- URL中传递参数给视图函数
1. 采用在url中使用变量的方式: 在path的第一个参数中,使用<参数名>的方式可以传递参数.然后在视图函数中也要写一个参数,视图函数中的参数必须和url中的参数名称保持一致,不然就找 ...
- 视图交互--表视图(UITableView)的cell交互析略
在表视图UITableView的cell上经常有一些交互,根据项目开发中的情况,需要对此进行一些规范.总结出了几种交互方法,这些方法在其他视图的交互上同样可以适用.用一个简单的例子来举例说明一下,其他 ...
- ASP.NET MVC之从控制器传递数据到视图四种方式(一)
前言 本系列开始着手讲述ASP.NET MVC,也算是自己对基础的回顾以及进一步深入学习,保证每天发表一篇该系列文章,关于基本知识则不再叙述,园子有关文章不胜枚举,这一系列若有叙述不当或错误之处,欢迎 ...
- Laravel教程 三:视图变量传递和Blade
Laravel教程 三:视图变量传递和Blade 此文章为原创文章,未经同意,禁止转载. Blade 上一篇我们简单地说了Router,Views和Controllers的工作流程,这一次我就按照上一 ...
- ASP.NET MVC之从控制器传递数据到视图四种方式
前言 本系列开始着手讲述ASP.NET MVC,也算是自己对基础的回顾以及进一步深入学习,保证每天发表一篇该系列文章,关于基本知识则不再叙述,园子有关文章不胜枚举,这一系列若有叙述不当或错误之处,欢迎 ...
- VC++ 6.0中实现三叉切分窗口与多视图 [转]
一.引用 当用户需要同时对文当的不同部分进行编辑时,常常会用到切分窗口;这些窗口可以都是相同的视,或者一个窗口为列表视,而另一个为树型视图.应用程序框架有多种方式来表示多视图,切分窗口是其中的方式之一 ...
- ASP.NET MVC 5 学习教程:控制器传递数据给视图
原文 ASP.NET MVC 5 学习教程:控制器传递数据给视图 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字 ...
随机推荐
- Spark常见错误汇总
1. Spark Driver cannot bind on port0, SparkContext initialized failed 如果是通过spark-submit等命令行提交的任务,在sp ...
- 如何在编译Xcode-Plugin工程的时候增加Cocoapods依赖
关于如何在编译Xcode-Plugin工程的时候增加Cocoapods依赖 以及在Mac App上使用Cocoapods的时候遇到Library not found for -lPods时的解决办法 ...
- Storm系列(九)架构分析之Supervisor-同步Nimbus的事件线程
Supervisor由三个线程组成,一个计时器线程和两个事件线程. 计时器线程负责维持心跳已经更新Zookeeper中的状态,还负责每隔一定的时间将事件线程需要执行的事件添加到其对应的队列中. 两个事 ...
- strace使用详解
(一) strace 命令 用途:打印 STREAMS 跟踪消息. 语法:strace [ mid sid level ] ... 描述:没有参数的 strace 命令将所有的驱动程序和模块中的所 ...
- 如果iis的配置文件 applicationHost.config坏掉了, 会在 C:\inetpub\history\ 中存储历史备份。复制过去还原就可以了-摘自网络
You will usually get the error ‘Configuration file is not well-formed XML’ ‘C:\Windows\system32\inet ...
- NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)"
原文: http://stackoverflow.com/questions/19874935/afnetworking-2-0-post-issue-cocoa-error-3840json-tex ...
- POJ3155 Hard Life
Time Limit: 8000MS Memory Limit: 65536K Total Submissions: 8482 Accepted: 2461 Case Time Limit: ...
- 传值(VIP)
页面间传值主要分为:1.属性传值.2.协议传值.3.单例传值.4.Block传值: 界面之间的传值: 1.从前往后:属性传值 2.从后往前:代理传值 3.多界面之间的传值 — 单例传值 ...
- zend studio-如何更改字符集
在加载一个项目的过程中很时候会因为字符集的不匹配从而导致项目文件显示为乱码,zend studio开发工具应该如何设置字符集呢: 打开[windows]-[preference]-[workspace ...
- C# WPF 解压缩7zip文件 带进度条 sevenzipsharp
vs2013附件 :http://download.csdn.net/detail/u012663700/7427461 C# WPF 解压缩7zip文件 带进度条 sevenzipsharp W ...