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
分享到:
相关推荐
以下是对"自己写的一个图片上传功能"这一主题的详细解释,以及相关知识点的阐述。 1. **前端上传组件**: 在前端部分,通常会有一个用户界面元素,如按钮或输入框,用于触发文件选择对话框。HTML5引入了`...
【标题】"自己写的一个Jquery" 描述了一个个人开发的基于Jquery的项目,它采用了Win8风格的用户界面设计,旨在为用户提供一个现代化、直观的交互体验。这个项目可能是一个轻量级的库或者插件,利用Jquery的强大功能...
本资源“600个网页Logo图片展示”提供了一个丰富的素材库,可以帮助设计师们理解当前网页Logo的设计趋势、风格以及各种行业的表现手法。 1. **设计多样性**:这600个Logo展示了不同的设计风格,包括极简主义、扁平...
【标题】:“左右循环滚动图片展示” 在网页设计中,图片展示是不可或缺的一部分,而“左右循环滚动图片展示”是一种常见的交互式展示方式,...通过学习和修改这份代码,可以为自己的项目定制出个性化的图片展示功能。
AS3 3D墙图片展示系统源码是一个基于ActionScript 3.0的项目,用于创建具有三维视觉效果的图像墙。这个系统允许用户以独特的方式浏览和展示大量的图片,通常用于网页或互动应用程序中,提供一个吸引人的用户体验。...
【标题】"自己写的小项目"揭示了一个个人开发的综合性应用程序,它可能是一个Web应用或者一个桌面应用,具有丰富的功能和交互性。这个项目中包含了多个关键的技术元素,旨在提供全面的服务。 【描述】提到的功能点...
在jQuery框架下,开发一个自己的插件(图片查看),点击图片,可以弹出一个遮罩层,点击可以查看图片上下,都写到了插件里面,对初学jQuery插件开发者有很大的帮助,并且可以在这基础上扩展,是个很好的开始。
这个由你自己编写的图片缩放小工具,利用了OpenCV这一强大的计算机视觉库,为用户提供了便捷的图片尺寸调整功能。OpenCV(Open Source Computer Vision Library)是一个开源的跨平台库,包含了众多图像处理和计算机...
在本项目中,我们主要探讨的是如何利用SpringMVC、MyBatis以及JSP技术来构建一个具有图片上传功能的用户注册系统。这个系统允许用户在注册时上传个人头像,将其存储到数据库中,从而提供更加个性化的用户体验。下面...
这个标题表明,这是一个基于ActionScript 3.0(AS3.0)编写的Flash项目,其核心是一个产品展示系统。ActionScript是Adobe Flash Professional和Flex Builder等工具中用于创建交互式内容的编程语言,而AS3.0版本引入...
【标题】"自己写的一个js拼图游戏"揭示了这个项目是一个使用JavaScript编程语言实现的拼图游戏。JavaScript,简称JS,是Web开发中的主要脚本语言,常用于客户端的交互逻辑,使得网页更具动态性。 【描述】"自己上传...
标题中的“自己写的二个python小工具,用于图片处理的”揭示了这是一份与Python编程相关的资源,其中包含了两个自定义的小程序,主要用于图片处理。这些工具可能涵盖了图像的查看、格式转换、编辑或其他与图像操作...
【标题】中的“基于PHP的京东图床外链上传+图片展示网站php源码”指的是一个使用PHP编程语言开发的项目,它实现了京东图床(图片存储服务)的外链上传功能以及图片的在线展示。这个项目的核心在于帮助用户将图片上传...
"自己写的一个小例子" 指的是一个个人编写的代码示例,它可能涉及到图像处理技术,特别是针对图像边缘的去锯齿处理。去锯齿是改善图像质量的重要步骤,尤其是在显示高分辨率图像或者进行图形绘制时,可以有效地消除...
这个"JS代码写的图片切换代码"是一个基于JavaScript实现的图片轮播功能,旨在为网页提供美观且实用的图片展示体验。下面我们将深入探讨这个功能的工作原理、涉及的技术以及如何运用。 首先,`index.htm`是网页的主...
【标题】:“自己写的一个 优化大师” 在IT领域,"优化大师"通常是指一类能够提升计算机性能、清理系统垃圾、优化系统设置的软件。在这个项目中,开发者使用C#编程语言自行创建了一个类似的工具。C#是一种面向对象...
标题 "自己写的一个购物车(jsp+javabean)" 提供了一个关于小型电子商务系统实现的基础信息,这是一个基于JavaWeb技术的简单购物车应用。在这个项目中,开发者使用了JSP(JavaServer Pages)和JavaBean两种核心组件来...
本文将深入探讨如何自己编写一个ListView实例,并与图片相结合。 首先,理解ListView的基本结构至关重要。ListView通过Adapter类将数据源与视图进行绑定。Adapter充当了数据集与ListView之间的桥梁,负责将数据转化...
本文将详细介绍如何创建一个基本的图片浏览器,以"ImageViewer"为例,它能从SD卡读取图片并在屏幕上展示。 首先,我们来了解一下"ImageViewer"这个应用的核心组件。ImageViewer是Android系统中的一个自定义视图,它...