TableView 截图

话不多说,直接上代码。

 1 //
 2 //  MainViewController.m
 3 //  TableViewSreenShot
 4 //
 5 //  Created by ChenJungang on 14/11/8.
 6 //  Copyright (c) 2014年 ChenJungang. All rights reserved.
 7 //
 8
 9 #import "MainViewController.h"
10 #import "MainCell.h"
11
12 #define kTableViewRowCount 30
13 #define kTableViewHeight 76
14
15 @interface MainViewController ()
16 @property (strong, nonatomic) IBOutlet UITableView *tableView;
17 @end
18
19 @implementation MainViewController
20
21 - (void)viewDidLoad {
22     [super viewDidLoad];
23     // Do any additional setup after loading the view from its nib.
24     self.title = @"screen shot";
25     self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"share" style:UIBarButtonItemStylePlain target:self action:@selector(screenshotAction:)];
26 }
27
28 - (void)screenshotAction:(id)sender{
29
30     NSMutableArray *indexPaths = [NSMutableArray array];
31     for(NSUInteger i = 0; i < [self.tableView numberOfRowsInSection:0]; i++){
32         [indexPaths addObject:[NSIndexPath indexPathForRow:i inSection:0]];
33     }
34     UIImage *image = [self screenShotForIndexPaths:indexPaths];
35     UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:@[image] applicationActivities:nil];
36     [self.navigationController presentViewController:activityVC animated:YES completion:NULL];
37 }
38
39 #pragma mark - UITableViewDataSource
40 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
41     return kTableViewRowCount;
42 }
43
44 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
45     return 1;
46 }
47
48 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
49     static NSString *mainCellId = @"CellId";
50     MainCell *mainCell = [tableView dequeueReusableCellWithIdentifier:mainCellId];
51     if (!mainCell) {
52         mainCell = [MainCell loadFromXib];
53     }
54     mainCell.accountNameLabel.text = [NSString stringWithFormat:@"row : %ld",(long)indexPath.row];
55     return mainCell;
56 }
57
58 #pragma mark - UITableViewDelegate
59 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
60     [tableView deselectRowAtIndexPath:indexPath animated:YES];
61 }
62 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
63     return kTableViewHeight;
64 }
65
66 #pragma mark - Screen shot Method
67 - (UIImage*)screenShotForIndexPaths:(NSArray*)indexPaths
68 {
69     CGPoint originalOffset = self.tableView.contentOffset;
70
71     UIGraphicsBeginImageContextWithOptions(CGSizeMake(CGRectGetWidth(self.tableView.frame), self.tableView.rowHeight * indexPaths.count), NO, 0.0);
72     CGContextRef ctx = UIGraphicsGetCurrentContext();
73
74     //将cell逐个渲染到CGContext上
75     MainCell *cell = nil;
76     for (NSIndexPath *indexPath in indexPaths) {
77
78         //找到相应位置的cell,渲染出來
79         [self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionNone animated:NO];
80         cell = (MainCell *)[self.tableView cellForRowAtIndexPath:indexPath];
81         [cell.layer renderInContext:ctx];
82
83         //在context上渲染的origin
84         CGContextTranslateCTM(ctx, 0, self.tableView.rowHeight);
85     }
86
87     UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
88     UIGraphicsEndImageContext();
89     self.tableView.contentOffset = originalOffset;
90     return image;
91 }
92
93
94 - (void)didReceiveMemoryWarning {
95     [super didReceiveMemoryWarning];
96     // Dispose of any resources that can be recreated.
97 }
98
99 @end

时间: 2024-10-27 11:44:06

TableView 截图的相关文章

如何给UITableView 或 UIScrollView 的content 做截图

我们都知道,给手机屏幕做截图很容易,如下面代码 - (UIImage*) imageWithUIView:(UIView*) view{ // 创建一个bitmap的context // 并把它设置成为当前正在使用的context UIGraphicsBeginImageContext(view.bounds.size); CGContextRef currnetContext = UIGraphicsGetCurrentContext(); //[view.layer drawInContex

仿QQ空间用一个tableview显示多种自定义cell

第一部分 要实现效果 先来看看真实QQ空间的效果吧: 从这张截图中,可以看到两种自定义的cell,其实在QQ空间的我的空间中有三种自定义的cell,那么这就是我们要实现的效果. 第二部分 实现的思路 第一步(由于没有数据源,我们只好操作plist文件): 创建我们所需要的plist文件,如下图: 这是表格样式三所需的plist文件 这是我们表格样式一所需的plist文件 这是表格样式二所需要的文件 第二步 有了素材文件之后,就好办了,我们需要把它解析出来,由于这些plist文件都是以数组形式包装

点击城市中的tableView跳转到旅游景点

初始化时候的效果图: 点击单元格后的效果图: 项目目录: plist截图: RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController : UIViewController <UITableViewDelegate,UITableViewDataSource> { UITableView * _tableView; NSMutableArray * provinceArray; } @end

iOS-截取TableView生成图片

先看一下实例效果: 如果所示,这是一个在APP中截图,并调起微信客户端,发送给好友的例子,图片就是一个tableView的截图. 先实现一个小例子,如果tableVIew里面的内容,没有超过当前屏幕显示的区域,我们可以直接根据tableView的frame,生成一张图片 // 根据view生成图片 UIGraphicsBeginImageContext(shareView.bounds.size); [shareView.layer renderInContext:UIGraphicsGetCu

IOS开发UI篇之tableView 的用法详解

1.我们知道tableView是IOS中的高级视图,其继承与ScrollView,故我们知道他有具有ScrollView的所有功能.而且还扩展了许多.当然在这里就不一一介绍了. 2.tableView的表现格式分两种Plain和Grouped两种风格 3.tableView的两种代理类delegate和dataSource.这两种代理至关重要,我们在做tableView和这些代理是分不开的. 4.代理中比较常用的代理方法: (1)dataSource的两个必须使用的代理 @required //

ios开发之--tableview单选实现

实现思路比较简单,这里仅做记录: 直接上代码: 1,实现didSelectRowAtIndexPath方法 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [[NSUserDefaults standardUserDefaults]setValue:[array objectAtIndex:indexPath.row] forKey:APP_CHANGEVOI

iOS中的截屏(屏幕截屏及scrollView或tableView的全部截屏)

iOS中的截屏(屏幕截屏及scrollView或tableView的全部截屏) 2017.03.16 12:18* 字数 52 阅读 563评论 4喜欢 2 1. 截取屏幕尺寸大小的图片并保存至相册 保存至相册只需将方法saveImage中的代码替换即可 UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, YES, 0.0); [self.view.layer renderInContext:UIGraphicsGetCur

关于在selenium 中 webdriver 截图操作

package prictce; import java.io.File; import java.io.IOException; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; import org.openqa.selenium.We

TableView的accessoryButtonTappedForRow方法执行的时机

敲代码时遇到了这个问题,别偷懒,写下来备查. 当你在IB中对TableView中的accessory(注意,我说的是cell中的accessory,而不是cell)创建segue时,如果你在VC中同时实现以下3个方法,请问调用的次序是神马!? //1 func tableView(_ tableView: UITableView, accessoryButtonTappedForRowWith indexPath: IndexPath) //2 override func shouldPerfo