Java Xcode image将ImageView链接到下一个视图控制器

Java Xcode image将ImageView链接到下一个视图控制器,java,iphone,ios,xcode,xcode4.3,Java,Iphone,Ios,Xcode,Xcode4.3,我为一个选项卡式应用程序制作了一个Xcode项目,该应用程序在滚动视图中显示色样的图像。如何将scrollview中的一个图像链接到下一个视图控制器?下面是我的代码和图片。因此,当您单击scrollview中的一个图像或样例颜色时,它将链接到新控制器 我有多个图像可以向下滚动iPhone页面,我是否需要循环这些图像,因为总共有24个图像。我可以用界面生成器制作一个按钮并将其链接到下一个场景,但我可以在屏幕上显示5幅图像 DecorsViewController_iPhone.h #import

我为一个选项卡式应用程序制作了一个Xcode项目,该应用程序在滚动视图中显示色样的图像。如何将scrollview中的一个图像链接到下一个视图控制器?下面是我的代码和图片。因此,当您单击scrollview中的一个图像或样例颜色时,它将链接到新控制器

我有多个图像可以向下滚动iPhone页面,我是否需要循环这些图像,因为总共有24个图像。我可以用界面生成器制作一个按钮并将其链接到下一个场景,但我可以在屏幕上显示5幅图像

DecorsViewController_iPhone.h

 #import <UIKit/UIKit.h>

 @interface DecorsViewController_iPhone : UIViewController

 {
IBOutlet UIScrollView *scrollViewDecors;
 }

@property (nonatomic, retain) UIView *scrollViewDecors;

@end
#导入
@界面DecorsViewController\u iPhone:UIViewController
{
IBOUTLE UIScrollView*滚动视图装饰;
}
@属性(非原子,保留)UIView*scrollViewDecors;
@结束
DecorsViewController_iPhone.m

#import "DecorsViewController_iPhone.h"

@interface DecorsViewController_iPhone ()

@end

@implementation DecorsViewController_iPhone


@synthesize scrollViewDecors;


const CGFloat kScrollObjHeight  = 81.5;
const CGFloat kScrollObjWidth   = 320.0;
const NSUInteger kNumImages     = 24;


- (void)layoutScrollImages
{
UIImageView *view = nil;
NSArray *subviews = [scrollViewDecors subviews];

// reposition all image subviews in a horizontal serial fashion
CGFloat curXLoc = 0;
CGFloat curYLoc = 0;
CGFloat curYSpace = 1;

for (view in subviews)
{
    if ([view isKindOfClass:[UIImageView class]] && view.tag > 0)
    {
        CGRect frame = view.frame;
        frame.origin = CGPointMake(curXLoc, curYLoc);
        view.frame = frame;

        curYLoc += (curYSpace + kScrollObjHeight);
    }
}

// set the content size so it can be scrollable
    [scrollViewDecors setContentSize:CGSizeMake(([scrollViewDecors bounds].size.width), (kNumImages * kScrollObjHeight))]; // Vertical Option
 }

- (void)viewDidLoad
{
self.view.backgroundColor = [UIColor viewFlipsideBackgroundColor];

// 1. setup the scrollview for multiple images and add it to the view controller
//
// note: the following can be done in Interface Builder, but we show this in code for clarity
[scrollViewDecors setBackgroundColor:[UIColor blackColor]];
[scrollViewDecors setCanCancelContentTouches:NO];
scrollViewDecors.indicatorStyle = UIScrollViewIndicatorStyleWhite;
scrollViewDecors.clipsToBounds = YES;       // default is NO, we want to restrict drawing within our scrollview
scrollViewDecors.scrollEnabled = YES;

// pagingEnabled property default is NO, if set the scroller will stop or snap at each photo
// if you want free-flowing scroll, don't set this property.
// scrollView1.pagingEnabled = YES;

// load all the images from our bundle and add them to the scroll view
NSUInteger i;
for (i = 1; i <= kNumImages; i++)
{


    NSString *imageName = [NSString  stringWithFormat:@"Artwork_iPhone_Decors_Scrollview_%d.png", i];
    UIImage *image = [UIImage imageNamed:imageName];
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];

    // setup each frame to a default height and width, it will be properly placed when we call "updateScrollList"
    CGRect rect = imageView.frame;
    rect.size.height = kScrollObjHeight;
    rect.size.width = kScrollObjWidth;
    imageView.frame = rect;
    imageView.tag = i;  // tag our images for later use when we place them in serial fashion
    [scrollViewDecors addSubview:imageView];
    //[imageView release];
}

[self layoutScrollImages];  // now place the photos in serial layout within the scrollview

}

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

//- (void)viewDidLoad
//{
// [super viewDidLoad];
//  // Do any additional setup after loading the view, typically from a nib.
//}

- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
} else {
    return YES;
}
}

@end
#导入“DecorsViewController_iPhone.h”
@界面设计视图控制器\u iPhone()
@结束
@实现DecorsViewController_iPhone
@综合室内装潢;
常数CGFloat kScrollObjHeight=81.5;
常量CGFloat KSCROLOBJWITH=320.0;
常数整数kNumImages=24;
-(无效)布局滚动图像
{
UIImageView*视图=无;
NSArray*子视图=[scrollViewDecors子视图];
//以水平串行方式重新定位所有图像子视图
CGFloat curXLoc=0;
cgloat curYLoc=0;
CGFloat curYSpace=1;
用于(子视图中的视图)
{
if([view iskindof类:[UIImageView类]]&&view.tag>0)
{
CGRect frame=view.frame;
frame.origin=CGPointMake(curXLoc,curYLoc);
view.frame=frame;
curYLoc+=(curYSpace+kScrollObjHeight);
}
}
//设置内容大小,使其可以滚动
[scrollViewDecors setContentSize:CGSizeMake(([scrollViewDecors bounds].size.width),(kNumImages*kScrollObjHeight));//垂直选项
}
-(无效)viewDidLoad
{
self.view.backgroundColor=[UIColor viewFlipsideBackgroundColor];
//1.为多个图像设置scrollview,并将其添加到视图控制器
//
//注意:以下内容可以在Interface Builder中完成,但为了清晰起见,我们在代码中显示了这一点
[scrollViewDecors setBackgroundColor:[UIColor blackColor]];
[scrollViewDecors设置CancelContentTouches:否];
scrollViewDecors.indicatorStyle=UIScrollViewIndicatorStyleWhite;
scrollViewDecors.clipsToBounds=YES;//默认值为NO,我们希望限制scrollview中的绘图
scrollViewDecors.scrollEnabled=是;
//PaginEnabled属性默认为否,如果设置,滚动条将在每张照片上停止或捕捉
//如果要自由滚动,请不要设置此属性。
//scrollView1.PaginEnabled=是;
//从我们的包中加载所有图像,并将它们添加到滚动视图中
NSUI;

对于(i=1;i您可以自定义UIImageView。例如,MyImageView。将其委托设置为您的主滚动视图,并添加
UIAPTgestureRecognitizer
并点击检测委托方法。 您可以在MyImageView中实现:

- (void)handleSingleTap:(UIGestureRecognizer *)gestureRecognizer {
// single tap 
if ([_delegate respondsToSelector:@selector(myImageViewWasSingleTapped:)])
    [_delegate myImageViewWasSingleTapped:self];
}
- (void)myImageViewWasSingleTapped:(MyImageView *)miv {
    AnotherViewController *asv = [[AnotherViewController alloc] initWithImage: miv];
    [self.navigationController pushViewController: asv animated:YES];
    [asv release];
}
然后在主滚动视图中(MyImageView的代理):


您可以自定义UIImageView。例如,MyImageView。将其委托设置为主滚动视图,并添加
UIApgestureRecognitizer
并点击Detecting delegate methods。 您可以在MyImageView中实现:

- (void)handleSingleTap:(UIGestureRecognizer *)gestureRecognizer {
// single tap 
if ([_delegate respondsToSelector:@selector(myImageViewWasSingleTapped:)])
    [_delegate myImageViewWasSingleTapped:self];
}
- (void)myImageViewWasSingleTapped:(MyImageView *)miv {
    AnotherViewController *asv = [[AnotherViewController alloc] initWithImage: miv];
    [self.navigationController pushViewController: asv animated:YES];
    [asv release];
}
然后在主滚动视图中(MyImageView的代理):


首先,您需要在视图中添加一个手势识别器,如下所示:

UITapGestureRecognizer *singleTapGestureRecognizer = [[UITapGestureRecognizer alloc]
                                                          initWithTarget:self
                                                          action:@selector(flipView:)];
    [singleTapGestureRecognizer setNumberOfTapsRequired:1];
    [self.view addGestureRecognizer:singleTapGestureRecognizer];
int number;

            if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
                number = visibleRect.origin.y / <height of each image on iPad in pixels>;
            }
            else {
                number = visibleRect.origin.y / <height of each image on iPhone in pixels>;
            }
然后,您需要实现“flipView”方法:

- (void)flipView:(UIPanGestureRecognizer *)recognizer {
    [self performSegueWithIdentifier:@"textView" sender:self];
}
正如您在我的案例中所看到的,当触发该方法时,我会执行一个序列(见下文):

“number”变量用于确定单击了哪个图像,我将可视矩形原点除以屏幕的宽度(以像素为单位),以计算按下了哪个图像,从而计算要发送到新视图的数据

在您的情况下,您可以使用Y坐标执行计算,以确定已按下的颜色,可能类似于:

UITapGestureRecognizer *singleTapGestureRecognizer = [[UITapGestureRecognizer alloc]
                                                          initWithTarget:self
                                                          action:@selector(flipView:)];
    [singleTapGestureRecognizer setNumberOfTapsRequired:1];
    [self.view addGestureRecognizer:singleTapGestureRecognizer];
int number;

            if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
                number = visibleRect.origin.y / <height of each image on iPad in pixels>;
            }
            else {
                number = visibleRect.origin.y / <height of each image on iPhone in pixels>;
            }
整数;
if([[UIDevice currentDevice]userInterfaceIdiom]==UIUserInterfaceIdiomPad){
number=visibleRect.origin.y/;
}
否则{
number=visibleRect.origin.y/;
}
或者,您可以使用UITableView,只需使用适当的颜色填充单元格,然后根据按下的单元格显示新视图

编辑 使用UITableView,并使用自定义tableview单元格为每个单元格填充图像。这是一种比您建议的简单得多的方法

请参阅以下链接:

如果使用iOS 5- 如果不是-


您正在将此任务过度复杂化,请按照上述教程进行操作,您将很快完成。如果此答案对您有帮助,请将其标记为正确。

首先,您需要在视图中添加一个手势识别器,如下所示:

UITapGestureRecognizer *singleTapGestureRecognizer = [[UITapGestureRecognizer alloc]
                                                          initWithTarget:self
                                                          action:@selector(flipView:)];
    [singleTapGestureRecognizer setNumberOfTapsRequired:1];
    [self.view addGestureRecognizer:singleTapGestureRecognizer];
int number;

            if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
                number = visibleRect.origin.y / <height of each image on iPad in pixels>;
            }
            else {
                number = visibleRect.origin.y / <height of each image on iPhone in pixels>;
            }
然后,您需要实现“flipView”方法:

- (void)flipView:(UIPanGestureRecognizer *)recognizer {
    [self performSegueWithIdentifier:@"textView" sender:self];
}
正如您在我的案例中所看到的,当触发该方法时,我会执行一个序列(见下文):

“number”变量用于确定单击了哪个图像,我将可视矩形原点除以屏幕的宽度(以像素为单位),以计算按下了哪个图像,从而计算要发送到新视图的数据

在您的情况下,您可以使用Y坐标执行计算,以确定已按下的颜色,可能类似于:

UITapGestureRecognizer *singleTapGestureRecognizer = [[UITapGestureRecognizer alloc]
                                                          initWithTarget:self
                                                          action:@selector(flipView:)];
    [singleTapGestureRecognizer setNumberOfTapsRequired:1];
    [self.view addGestureRecognizer:singleTapGestureRecognizer];
int number;

            if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
                number = visibleRect.origin.y / <height of each image on iPad in pixels>;
            }
            else {
                number = visibleRect.origin.y / <height of each image on iPhone in pixels>;
            }
整数;
if([[UIDevice currentDevice]userInterfaceIdiom]==UIUserInterfaceIdiomPad){
number=visibleRect.origin.y/;
}
否则{
number=visibleRect.origin.y/;
}
或者,您可以使用UITableView,只需使用适当的颜色填充单元格,然后根据按下的单元格显示新视图

编辑 使用UITableView,并使用自定义tableview单元格用图像填充每个单元格。这是一个更简单的方法