1

我正在尝试将一组用户交互视图添加到我现有的代码中。我有以下代码和一个数组,该数组使用滚动视图(带有页面控件)来显示一组图像。我想修改代码以显示在界面生成器中创建的一组用户交互视图。通过进行用户交互,这些视图将具有按钮和可缩放的图像视图。

------当前代码-----

带有滚动视图的视图控制器的实现文件(.m)

#import "AboutViewController.h"

@interface AboutViewController ()

@end

@implementation AboutViewController

@synthesize scrollView;
@synthesize pageControl;
@synthesize imageArray;

int page;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    //Can we load and display ViewControllers as opposed to images?  
    imageArray = [[NSArray alloc] initWithObjects:@"1.png", @"2.png", @"3.png", nil];

    for (int i = 0; i < [imageArray count]; i++ ) {
       int page = scrollView.contentOffset.x / scrollView.frame.size.width;

       CGRect frame;
       frame.origin.x = self.scrollView.frame.size.width * i;
       frame.origin.y = 0;
       frame.size = self.scrollView.frame.size;

        UIImageView *imageView = [[UIImageView alloc] initWithFrame:frame];
        imageView.image = [UIImage imageNamed:[imageArray objectAtIndex:i]];
        [self.scrollView addSubview:imageView];

       NSLog (@"page %d",page);

    }

    scrollView.contentSize = CGSizeMake(scrollView.frame.size.
                             width *[imageArray count], 
                          scrollView.frame.size.height);
}

#pragma mark - UIScrollView Delegate
- (void)scrollViewDidScroll:(UIScrollView *)sender
{

    CGFloat pageWidth = self.scrollView.frame.size.width;
    //calculate current page in scrollview 
    int page = floor((self.scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
    self.pageControl.currentPage = page;
    NSLog (@"page %d",page);
}

- (IBAction)done:(id)sender
{
    [self.delegate aboutViewControllerDidFinish:self];

}

@end

带有滚动视图的视图控制器的头文件(.h)

#import <UIKit/UIKit.h>

@class AboutViewController;

@protocol AboutViewControllerDelegate

- (void)aboutViewControllerDidFinish:(AboutViewController *)controller;
@end

@interface AboutViewController : UIViewController<UIScrollViewDelegate>


@property (strong, nonatomic,retain) id <AboutViewControllerDelegate> delegate;
@property (nonatomic,strong,) IBOutlet UIScrollView *scrollView;
@property (nonatomic, strong) IBOutlet UIPageControl *pageControl;
@property (nonatomic, strong) NSArray *imageArray;
@property(nonatomic, assign) IBOutlet UILabel *label;

- (IBAction)done:(id)sender; //returns back to main menu after a button is pressed

@end

- - - - - - - - - - - - - -更新 - - - - - - - - - - - ------------

进一步澄清:

对于那些可能加入这个问题的人,早些时候我对在滚动视图中嵌入视图控制器而不是视图感到困惑。我现在相信不可能在滚动视图中嵌入视图控制器,但可以将视图嵌入其中。

4

2 回答 2

2

也许你对UIViewand感到困惑UIViewController。只能UIView显示。例如,您的 imageView 是UIImageView(它是 的子类UIView)的一个实例,因此它可以呈现在您的屏幕上。UIViewController负责创建和配置UIView实例,不能显示。

通常, aUIViewController用于控制全屏视图,您可以在其上添加子视图。如果您想在屏幕上显示多个图像,aUIScrollView和 aUIPageControl就足够了。

如果您需要构建多个页面并且每个页面都有其依赖的外观和用户交互,您可以选择UINavigationController管理多个UIViewController实例并在其相关中创建和配置每个页面UIViewController

于 2013-08-15T09:43:50.457 回答
0

An NSArray(及其子类的任何实例,例如NSMutableArray)可以包含任何类型的对象。视图控制器是一个对象,所以一个NSArray实例可以持有它。

请注意,数组包含对其包含的对象的强引用,因此如果将对象添加到数组中,即使删除了所有其他引用(例如将它们设置为nil),它也会保留在内存中。当然,直到您从数组中删除对象。

顺便说一句,所有这些考虑因素也适用于集合和字典。

于 2013-08-15T09:56:54.120 回答