Objective c 如何在启用分页的scrollview中添加多个用户交互视图
我正在尝试向现有代码中添加一组用户交互视图。 我有以下代码和一个数组,该数组使用scrollview(带有页面控件)来显示一组图像。我想修改代码以显示在interface builder中创建的用户交互视图数组。通过用户交互,这些视图将具有按钮和可缩放的图像视图 -----现行代码----- 具有scrollview的视图控制器的实现文件(.m)Objective c 如何在启用分页的scrollview中添加多个用户交互视图,objective-c,uiview,uiscrollview,nsarray,uipagecontrol,Objective C,Uiview,Uiscrollview,Nsarray,Uipagecontrol,我正在尝试向现有代码中添加一组用户交互视图。 我有以下代码和一个数组,该数组使用scrollview(带有页面控件)来显示一组图像。我想修改代码以显示在interface builder中创建的用户交互视图数组。通过用户交互,这些视图将具有按钮和可缩放的图像视图 -----现行代码----- 具有scrollview的视图控制器的实现文件(.m) #import "AboutViewController.h" @interface AboutViewController () @end @
#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
#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
#导入“AboutViewController.h”
@关于VIEWCONTROLLER()的接口
@结束
@关于VIEWCONTROLLER的实现
@综合滚动视图;
@综合页面控制;
@综合成像阵列;
整版;
-(id)initWithNibName:(NSString*)nibNameOrNil bundle:(NSBundle*)nibBundleOrNil
{
self=[super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
如果(自我){
//自定义初始化
}
回归自我;
}
-(无效)viewDidLoad
{
[超级视图下载];
//我们可以加载和显示视图控制器而不是图像吗?
imageArray=[[NSArray alloc]initWithObjects:@“1.png”,“2.png”,“3.png”,nil];
对于(int i=0;i<[imageArray计数];i++){
int page=scrollView.contentOffset.x/scrollView.frame.size.width;
CGRect帧;
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 ImageName:[imageArray objectAtIndex:i]];
[self.scrollView addSubview:imageView];
NSLog(@“第%d页”,第页);
}
scrollView.contentSize=CGSizeMake(scrollView.frame.size)。
宽度*[imageArray计数],
滚动视图。帧。大小。高度);
}
#pragma标记-UIScrollView委托
-(无效)scrollViewDidScroll:(UIScrollView*)发送方
{
CGFloat pageWidth=self.scrollView.frame.size.width;
//在scrollview中计算当前页面
intpage=floor((self.scrollView.contentOffset.x-pageWidth/2)/pageWidth)+1;
self.pageControl.currentPage=page;
NSLog(@“第%d页”,第页);
}
-(iAction)完成:(id)发送方
{
[self.delegate aboutviewcontrollerdFinish:self];
}
@结束
具有scrollview的视图控制器的头文件(.h)
#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
#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
#导入
@关于视频控制器的课程;
@关于IEWControllerDelegate的协议
-(void)aboutviewcontrollerdifinish:(AboutViewController*)控制器;
@结束
@关于ViewController的界面:UIViewController
@属性(强、非原子、保留)id委托;
@属性(非原子,强,)IBMOutlet UIScrollView*scrollView;
@属性(非原子,强)IBUIPageControl*pageControl;
@属性(非原子,强)NSArray*imageArray;
@属性(非原子,赋值)IBUILabel*label;
-(iAction)完成:(id)发送方//按下按钮后返回主菜单
@结束
---------------------------更新----------------------------------
进一步澄清:
对于那些可能会加入这个问题的人,我之前对在scrollview中嵌入视图控制器而不是视图感到困惑。我现在认为在scrollview中嵌入视图控制器是不可能的,但可以在其中嵌入视图 您可能会与
UIView
和UIViewController
混淆。只能显示ui视图
。例如,您的imageView是UIImageView
(它是UIView
的子类)的一个实例,因此它可以显示在屏幕上UIViewController
负责创建和配置UIView
实例,无法显示
通常,会制作一个UIViewController
,以控制可在其上添加子视图的全屏视图。如果您想在屏幕上显示多个图像,使用带有UIPageControl
的UIScrollView
就足够了
如果需要构建多个页面,并且每个页面都有其依赖的外观和用户交互,则可以选择UINavigationController
来管理多个UIViewController
实例,并在其关联UIViewController
中创建和配置每个页面 一个NSArray
(及其子类的任何实例,如NSMutableArray
)可以容纳任何类型的对象。视图控制器是一个对象,因此NSArray
实例可以容纳它
请注意,数组包含对其包含的对象的强引用,因此,如果将对象添加到数组中,即使删除了所有其他引用(例如,将它们设置为nil
),它也将保留在内存中。当然,直到从数组中删除对象
顺便说一句,所有这些注意事项对于集合和字典也是有效的。你是在问如何创建一个数组并用ViewController填充它吗?是的,John,这基本上就是我想要的。你看,我的目标是创建一个带有ViewController的数组,这样如果用户导航到AboutViewController,他们就可以在嵌入式ViewController的页面之间滚动。我可以建议使用NSCache,如果内存消耗过高,它可以处理逐出对象。您可以检查缓存是否具有所需的视图控制器,如果没有,请创建它并添加到缓存中。现在还不清楚你遇到了什么问题,或者你陷入了什么困境。你能更具体地说明你有什么问题吗?我更新了问题,以澄清我在寻找什么。