1

ユーザー インタラクティブ ビューの配列を既存のコードに追加しようとしています。スクロールビュー (ページ コントロール付き) を使用して一連の画像を表示する配列を含む次のコードがあります。インターフェイス ビルダーで作成された一連のユーザー インタラクティブ ビューを表示するようにコードを変更したいと考えています。ユーザーの操作により、これらのビューにはボタンとズーム可能な画像ビューが表示されます。

-----現在のコード-----

scrollview付きView Controllerの実装ファイル(.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

scrollview付きView Controllerのヘッダファイル(.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

UIViewとと混同しているかもしれませんUIViewController。表示のみUIView可能です。たとえば、imageView はUIImageView(のサブクラスであるUIView) のインスタンスであるため、画面に表示できます。UIViewControllerインスタンスの作成と構成を担当するため、UIView表示できません。

通常、UIViewControllerサブビューを追加できるフルスクリーン ビューを制御するために a が作成されます。画面に複数の画像を表示する場合は、aUIScrollViewと aUIPageControlで十分です。

UINavigationController複数のページを作成する必要があり、各ページに依存する外観とユーザー インタラクションがある場合は、複数のUIViewControllerインスタンスを管理し、各ページをその相関で作成および構成することを選択できますUIViewController

于 2013-08-15T09:43:50.457 に答える
0

NSArray(および などのそのサブクラスの任意のインスタンスNSMutableArray)、任意の種類のオブジェクトを保持できます。ビュー コントローラーはオブジェクトであるため、NSArrayインスタンスがそれを保持できます。

配列は含まれるオブジェクトへの強い参照を保持しているため、オブジェクトが配列に追加された場合、他のすべての参照が削除されても (たとえば、それらを に設定することによってnil) メモリ内に残ります。もちろん、配列からオブジェクトを削除するまで。

これらの考慮事項はすべて、セットと辞書にも当てはまります。

于 2013-08-15T09:56:54.120 に答える