`

自己写的一个图片展示

 
阅读更多
MediaComponentView.h

//
//  MediaComponentView.h
//  MediaComponent
//
//  Created by Jason Wang on 10/7/10.
//  Copyright 2010 __MyCompanyName__. All rights reserved.
//
#import <UIKit/UIKit.h>


@interface MediaComponentView : UIView <UITableViewDelegate,UITableViewDataSource> {
	NSArray *images;
	
	NSUInteger index;
	
	CGRect imageViewRect;
	
	//UITableView *_tableView;
}

@property(nonatomic,readonly) NSUInteger index; 

- (id)initWithFrame:(CGRect)frame images:(NSArray *)imagesAry;
- (void)show;

@end


MediaComponentView.m

//
//  MediaComponentView.m
//  MediaComponent
//
//  Created by Jason Wang on 10/7/10.
//  Copyright 2010 __MyCompanyName__. All rights reserved.
//

#define MAINVIEW_PER 0.75
#define LISTVIEW_PER 0.25
#define TABLE_GAP_HEIGHT_PER 0.1

#define MAIN_GAP_WIDTH 3
#define IMAGE_GAP_WIDTH 8


#define TABLE_HEIGHT 0.8

#import "MediaComponentView.h"
#import "MediaComponentCell.h"

@interface MediaComponentView()
- (void)showMainImage:(NSInteger)_index;
- (void)showNewImage:(id)sender;
@end


@implementation MediaComponentView

@synthesize index;

- (id)initWithFrame:(CGRect)frame images:(NSArray *)imagesAry{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code here.
		images = [[NSArray alloc] initWithArray:imagesAry];
		index = 0;
    }
    return self;
}

- (void)drawRect:(CGRect)dirtyRect {
    // Drawing code here.
	
}

- (void)show {
	CGRect rect = self.frame;
	self.backgroundColor = [UIColor colorWithWhite:0.8 alpha:1.0];
	if ([images count] > 0) {
		index = 0;
		
		//Get the first image in images arry
		UIImage *image = [UIImage imageNamed:[[images objectAtIndex:index] objectForKey:@"image"]];
		NSString *comment = [[images objectAtIndex:index] objectForKey:@"comment"];
		
		UIView *mainImageView = [[UIView alloc] initWithFrame:CGRectMake(MAIN_GAP_WIDTH, MAIN_GAP_WIDTH, rect.size.width - MAIN_GAP_WIDTH * 2 , rect.size.height - MAIN_GAP_WIDTH * 2)];
		mainImageView.backgroundColor = [UIColor whiteColor];
		CGRect mainImageViewRect = mainImageView.frame;
		mainImageView.tag = 1;
		
		//init the UIImageView
		UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
		//set the tag to 1, in order to get the UIImageView later
		imageView.tag = 2;
		imageView.contentMode = UIViewContentModeScaleAspectFit; 
		imageView.frame = CGRectMake(IMAGE_GAP_WIDTH, IMAGE_GAP_WIDTH, mainImageViewRect.size.width - IMAGE_GAP_WIDTH * 2, mainImageViewRect.size.height - IMAGE_GAP_WIDTH * 2);
		imageViewRect = imageView.frame;
		
		if ([images count] > 1) {
			mainImageViewRect = CGRectMake(MAIN_GAP_WIDTH, MAIN_GAP_WIDTH, rect.size.width * MAINVIEW_PER - MAIN_GAP_WIDTH, rect.size.height - MAIN_GAP_WIDTH * 2);
			imageViewRect = CGRectMake(IMAGE_GAP_WIDTH, IMAGE_GAP_WIDTH, mainImageViewRect.size.width - IMAGE_GAP_WIDTH * 2, mainImageViewRect.size.height - IMAGE_GAP_WIDTH * 2);
			
			UIView *listView = [[UIView alloc] initWithFrame:CGRectMake(rect.size.width * MAINVIEW_PER + IMAGE_GAP_WIDTH, MAIN_GAP_WIDTH, rect.size.width * LISTVIEW_PER - IMAGE_GAP_WIDTH * 2, rect.size.height - MAIN_GAP_WIDTH * 2)];
			listView.backgroundColor = [UIColor clearColor];
			CGRect listViewRect = listView.frame;
			
			UITableView *_tableView = [[UITableView alloc] initWithFrame:CGRectMake(IMAGE_GAP_WIDTH, listViewRect.size.height * TABLE_GAP_HEIGHT_PER, listViewRect.size.width - IMAGE_GAP_WIDTH * 2, listViewRect.size.height * (1 - TABLE_GAP_HEIGHT_PER * 2)) style:UITableViewStylePlain];
			_tableView.backgroundColor = [UIColor blackColor];	
			_tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
			_tableView.dataSource = self;
			_tableView.delegate = self;
			
			[listView addSubview:_tableView];
			[_tableView release]; 
			
			[self addSubview:listView];
			[listView release];
		}
		
		if ((comment && ![comment isEqualToString:@""]) || [images count] > 1) {
			imageViewRect = CGRectMake(imageViewRect.origin.x, imageViewRect.origin.y, imageViewRect.size.width, imageViewRect.size.height * 7 / 8 - IMAGE_GAP_WIDTH);
			
			CGRect commentViewRect = CGRectMake(imageViewRect.origin.x, imageViewRect.origin.y + imageViewRect.size.height + IMAGE_GAP_WIDTH, imageViewRect.size.width, imageViewRect.size.height / 8);
			
			UITextView * textView = [[UITextView alloc] initWithFrame:commentViewRect];
			textView.textAlignment = UITextAlignmentCenter;
			textView.text = comment;
			textView.editable = NO;
			textView.backgroundColor = [UIColor clearColor];
			textView.font = [UIFont systemFontOfSize:16];
			textView.tag = 3;
			[mainImageView addSubview:textView];
			[textView release];
		}
		mainImageView.frame = mainImageViewRect;
		imageView.frame= imageViewRect;
		
		[mainImageView addSubview:imageView];
		[imageView release];
		
		[self addSubview:mainImageView];
		[mainImageView release];
	}
}

- (void)showMainImage:(NSInteger)_index {
	UIView *mainImageView = [self viewWithTag:1];
	UIImageView *imageView = (UIImageView *)[mainImageView viewWithTag:2];
	imageViewRect = imageView.frame;
	[UIView beginAnimations:nil context:NULL];
	[UIView setAnimationDuration:0.5f];
	[UIView setAnimationDelegate:self];
	[UIView setAnimationDidStopSelector:@selector(showNewImage:)];
	imageView.frame = CGRectMake(imageViewRect.origin.x, imageViewRect.origin.y, imageViewRect.size.width, 0);
	[UIView commitAnimations];
}

- (void)showNewImage:(id)sender {
	UIView *mainImageView = [self viewWithTag:1];
	UITextView *textView = (UITextView *)[mainImageView viewWithTag:3];
	textView.text = [[images objectAtIndex:index] objectForKey:@"comment"];
	UIImageView *imageView = (UIImageView *)[mainImageView viewWithTag:2];
	NSString *imagePath = [[images objectAtIndex:index] objectForKey:@"image"];
	[imageView setImage:[UIImage imageNamed:imagePath]];
	[UIView beginAnimations:nil context:NULL];
	[UIView setAnimationDuration:0.5f];
	imageView.frame = imageViewRect;
	[UIView commitAnimations];
}

#pragma mark UITableView

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath {
	MediaComponentCell *cell = (MediaComponentCell *)[tableView cellForRowAtIndexPath:indexPath];
	[cell deSelectedNow];
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
	return self.frame.size.width * LISTVIEW_PER - IMAGE_GAP_WIDTH * 4;
}

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

- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section{
	return [images count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
	static NSString * CellIdentifier = @"Cell";
	MediaComponentCell *cell = (MediaComponentCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
	if (cell == nil) {
		cell = [[[MediaComponentCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
	}
	[cell setData:[[images objectAtIndex:indexPath.row] objectForKey:@"image"] index:indexPath.row];
	cell.selectionStyle = UITableViewCellSelectionStyleNone;
	cell.delegateView = self;
	return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
	if (index == indexPath.row) return;
	index = indexPath.row;
	MediaComponentCell *cell = (MediaComponentCell *)[tableView cellForRowAtIndexPath:indexPath];
	[cell selectedNow];
	if (index != 0) {
		MediaComponentCell *firstCell = (MediaComponentCell *)[tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
		[firstCell deSelectedNow]; 
	}
	[self showMainImage:indexPath.row];
}

- (void)dealloc {
	[images release];
	[super dealloc];
}

@end


MediaComponentCell.h

//
//  MediaComponentCell.h
//  MediaComponent
//
//  Created by Jason Wang on 10/7/10.
//  Copyright 2010 __MyCompanyName__. All rights reserved.
//

#import <UIKit/UIKit.h>


@interface MediaComponentCell : UITableViewCell {
	NSString *imageFile;
	
	NSUInteger cellAtIndex;
	
	id delegateView;
}

@property(nonatomic,assign) id delegateView;

- (void)setData:(NSString *)imagePath index:(NSUInteger)_index;

- (void)selectedNow;

- (void)deSelectedNow;

@end


MediaComponentCell.m

//
//  MediaComponentCell.m
//  MediaComponent
//
//  Created by Jason Wang on 10/7/10.
//  Copyright 2010 __MyCompanyName__. All rights reserved.
//

#import "MediaComponentCell.h"
#import "MediaComponentView.h"

@interface MediaComponentCell()
- (UIImage *)convertImageToGrayScale:(UIImage *)image;
@end



@implementation MediaComponentCell

@synthesize delegateView;

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    if ((self = [super initWithStyle:style  reuseIdentifier:reuseIdentifier])) {
        // Initialization code
		
    }
    return self;
}

- (void)layoutSubviews {
	[super layoutSubviews];
	UIImageView *iView = (UIImageView *)[self.contentView viewWithTag:11];
	
	CGRect contentRect = self.contentView.frame;
	iView.frame = CGRectMake(contentRect.origin.x + 2, contentRect.origin.y + 2, contentRect.size.width - 4, contentRect.size.height - 4);
}

- (void)setData:(NSString *)imagePath index:(NSUInteger)_index {
	UIView *contentView = self.contentView;
	cellAtIndex = _index;
	if (imageFile) {
		[imageFile release];
		imageFile = nil;
	}
	imageFile = [[NSString alloc] initWithString:imagePath];
	UIImage *mainImage = [UIImage imageNamed:imageFile];
	MediaComponentView *view = (MediaComponentView *)delegateView;
	if (view.index != cellAtIndex) {
		mainImage = [self convertImageToGrayScale:mainImage];
	}
	UIImageView *iView = (UIImageView *)[contentView viewWithTag:11];
	if (!iView) {
		iView = [[UIImageView alloc] initWithImage:mainImage];
		iView.contentMode = UIViewContentModeScaleAspectFit;
		iView.tag = 11;
		[contentView addSubview:iView];
		[iView release];
	} else {
		[iView setImage:mainImage];
	}

}

- (void)selectedNow {
	UIImage *mainImage = [UIImage imageNamed:imageFile];
	UIImageView *iView = (UIImageView *)[self.contentView viewWithTag:11];
	[iView setImage:mainImage];
}

- (void)deSelectedNow {
	UIImage *origionalImage = [UIImage imageNamed:imageFile];
	UIImage *mainImage = [self convertImageToGrayScale:origionalImage];
	UIImageView *iView = (UIImageView *)[self.contentView viewWithTag:11];
	[iView setImage:mainImage];
}

- (UIImage *)convertImageToGrayScale:(UIImage *)image {
	CGRect imageRect = CGRectMake(0, 0, image.size.width, image.size.height);
	
	CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
	
	CGContextRef context = CGBitmapContextCreate(nil, image.size.width, image.size.height, 8, 0, colorSpace, kCGImageAlphaNone);
	
	CGContextDrawImage(context, imageRect, [image CGImage]);
	
	CGImageRef imageRef = CGBitmapContextCreateImage(context);
	
	UIImage *newImage = [UIImage imageWithCGImage:imageRef];
	
	CGColorSpaceRelease(colorSpace);
	CGContextRelease(context);
	CFRelease(imageRef);
	
	return newImage;
}


- (void)dealloc {
	[imageFile release]; 
    [super dealloc];
}


@end
0
1
分享到:
评论

相关推荐

    自己写的一个图片上传功能

    以下是对"自己写的一个图片上传功能"这一主题的详细解释,以及相关知识点的阐述。 1. **前端上传组件**: 在前端部分,通常会有一个用户界面元素,如按钮或输入框,用于触发文件选择对话框。HTML5引入了`...

    自己写的一个Jquery

    【标题】"自己写的一个Jquery" 描述了一个个人开发的基于Jquery的项目,它采用了Win8风格的用户界面设计,旨在为用户提供一个现代化、直观的交互体验。这个项目可能是一个轻量级的库或者插件,利用Jquery的强大功能...

    600个网页Logo图片展示

    本资源“600个网页Logo图片展示”提供了一个丰富的素材库,可以帮助设计师们理解当前网页Logo的设计趋势、风格以及各种行业的表现手法。 1. **设计多样性**:这600个Logo展示了不同的设计风格,包括极简主义、扁平...

    左右循环滚动图片展示

    【标题】:“左右循环滚动图片展示” 在网页设计中,图片展示是不可或缺的一部分,而“左右循环滚动图片展示”是一种常见的交互式展示方式,...通过学习和修改这份代码,可以为自己的项目定制出个性化的图片展示功能。

    as3 3d墙图片展示系统源码

    AS3 3D墙图片展示系统源码是一个基于ActionScript 3.0的项目,用于创建具有三维视觉效果的图像墙。这个系统允许用户以独特的方式浏览和展示大量的图片,通常用于网页或互动应用程序中,提供一个吸引人的用户体验。...

    自己写的小项目

    【标题】"自己写的小项目"揭示了一个个人开发的综合性应用程序,它可能是一个Web应用或者一个桌面应用,具有丰富的功能和交互性。这个项目中包含了多个关键的技术元素,旨在提供全面的服务。 【描述】提到的功能点...

    jQuery插件开发 图片查看插件(自己开发写的)

    在jQuery框架下,开发一个自己的插件(图片查看),点击图片,可以弹出一个遮罩层,点击可以查看图片上下,都写到了插件里面,对初学jQuery插件开发者有很大的帮助,并且可以在这基础上扩展,是个很好的开始。

    自己写的一个图片缩放的小工具

    这个由你自己编写的图片缩放小工具,利用了OpenCV这一强大的计算机视觉库,为用户提供了便捷的图片尺寸调整功能。OpenCV(Open Source Computer Vision Library)是一个开源的跨平台库,包含了众多图像处理和计算机...

    自己写的带有图片上传的用户注册案例

    在本项目中,我们主要探讨的是如何利用SpringMVC、MyBatis以及JSP技术来构建一个具有图片上传功能的用户注册系统。这个系统允许用户在注册时上传个人头像,将其存储到数据库中,从而提供更加个性化的用户体验。下面...

    超级漂亮 as3.0 产品展示,带源码!自己写的

    这个标题表明,这是一个基于ActionScript 3.0(AS3.0)编写的Flash项目,其核心是一个产品展示系统。ActionScript是Adobe Flash Professional和Flex Builder等工具中用于创建交互式内容的编程语言,而AS3.0版本引入...

    自己写的一个js拼图游戏

    【标题】"自己写的一个js拼图游戏"揭示了这个项目是一个使用JavaScript编程语言实现的拼图游戏。JavaScript,简称JS,是Web开发中的主要脚本语言,常用于客户端的交互逻辑,使得网页更具动态性。 【描述】"自己上传...

    自己写的二个python小工具,用于图片处理的

    标题中的“自己写的二个python小工具,用于图片处理的”揭示了这是一份与Python编程相关的资源,其中包含了两个自定义的小程序,主要用于图片处理。这些工具可能涵盖了图像的查看、格式转换、编辑或其他与图像操作...

    基于PHP的京东图床外链上传+图片展示网站php源码.zip

    【标题】中的“基于PHP的京东图床外链上传+图片展示网站php源码”指的是一个使用PHP编程语言开发的项目,它实现了京东图床(图片存储服务)的外链上传功能以及图片的在线展示。这个项目的核心在于帮助用户将图片上传...

    自己写的一个小例子

    "自己写的一个小例子" 指的是一个个人编写的代码示例,它可能涉及到图像处理技术,特别是针对图像边缘的去锯齿处理。去锯齿是改善图像质量的重要步骤,尤其是在显示高分辨率图像或者进行图形绘制时,可以有效地消除...

    JS代码写的图片切换代码

    这个"JS代码写的图片切换代码"是一个基于JavaScript实现的图片轮播功能,旨在为网页提供美观且实用的图片展示体验。下面我们将深入探讨这个功能的工作原理、涉及的技术以及如何运用。 首先,`index.htm`是网页的主...

    自己写的一个 优化大师

    【标题】:“自己写的一个 优化大师” 在IT领域,"优化大师"通常是指一类能够提升计算机性能、清理系统垃圾、优化系统设置的软件。在这个项目中,开发者使用C#编程语言自行创建了一个类似的工具。C#是一种面向对象...

    自己写的一个购物车(jsp+javabean)

    标题 "自己写的一个购物车(jsp+javabean)" 提供了一个关于小型电子商务系统实现的基础信息,这是一个基于JavaWeb技术的简单购物车应用。在这个项目中,开发者使用了JSP(JavaServer Pages)和JavaBean两种核心组件来...

    自己写listview例子跟图片结合

    本文将深入探讨如何自己编写一个ListView实例,并与图片相结合。 首先,理解ListView的基本结构至关重要。ListView通过Adapter类将数据源与视图进行绑定。Adapter充当了数据集与ListView之间的桥梁,负责将数据转化...

    自己写的android图片浏览器,ImageViewer

    本文将详细介绍如何创建一个基本的图片浏览器,以"ImageViewer"为例,它能从SD卡读取图片并在屏幕上展示。 首先,我们来了解一下"ImageViewer"这个应用的核心组件。ImageViewer是Android系统中的一个自定义视图,它...

Global site tag (gtag.js) - Google Analytics