Iphone iOS-从plist数据滚动图像
我用Iphone iOS-从plist数据滚动图像,iphone,objective-c,ios,xcode,ipad,Iphone,Objective C,Ios,Xcode,Ipad,我用UICollectionView创建了一个图库,并从plist文件加载了一组图像,当用户触摸每个单元格时,将加载一个全屏图像(与iPhone的照片应用程序相同),因此我遇到了一个问题,即当照片全屏时,我无法滚动和查看其他图像,以下是我的代码: 然后在PhotoViewerController中: -(void) creatContentWithNumerOfPage: (NSInteger) numberOfPage andCurrentPage: (NSInteger) currentPa
UICollectionView
创建了一个图库,并从plist文件加载了一组图像,当用户触摸每个单元格时,将加载一个全屏图像(与iPhone的照片应用程序相同),因此我遇到了一个问题,即当照片全屏时,我无法滚动和查看其他图像,以下是我的代码:
然后在PhotoViewerController中:
-(void) creatContentWithNumerOfPage: (NSInteger) numberOfPage andCurrentPage: (NSInteger) currentPage andImageArray:(NSArray *)imageArray {
self.pageControl.numberOfPages = numberOfPage;
self.pageControl.currentPage = currentPage;
[pageScrollView setContentSize:CGSizeMake(self.view.frame.size.width * pageControl.numberOfPages, self.view.frame.size.height)];
pageScrollView.delegate = self;
[self.view addSubview: pageScrollView];
NSMutableArray *mArray = [[NSMutableArray alloc] initWithCapacity:thumbnailViewController.imageArray.count];
for (int i = 0; i <= thumbnailViewController.imageArray.count; i++)
{
NSDictionary *picturesDictionary = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Photos" ofType:@"plist"]];
imageArray = [picturesDictionary objectForKey:@"PhotosArray"];
fullScreen = [[UIImageView alloc]initWithImage:[UIImage imageNamed:[imageArray objectAtIndex:currentPage]]];
[fullScreen setContentMode:UIViewContentModeScaleAspectFit];
fullScreen.frame = self.view.frame;
[mArray addObject:fullScreen];
[pageScrollView addSubview:fullScreen];
}
}
-(void)创建包含页码的内容:(NSInteger)页码和当前页:(NSInteger)当前页和图像数组:(NSArray*)图像数组{
self.pageControl.numberOfPage=numberOfPage;
self.pageControl.currentPage=currentPage;
[pageScrollView设置内容大小:CGSizeMake(self.view.frame.size.width*pageControl.numberOfPages,self.view.frame.size.height)];
pageScrollView.delegate=self;
[self.view addSubview:pageScrollView];
NSMutableArray*mArray=[[NSMutableArray alloc]initWithCapacity:thumbnailViewController.imageArray.count];
例如,对于(inti=0;i您的代码有很多问题
- 在
viewDidLoad
方法之前调用createcontentwithimages
,此时
我们不能期望self.view.frame
或
self.pageScrollView.frame
,您必须在viewDidLoad
中/之后调用它。
也许是这样:
[self presentViewController:photosViewController animated:YES completion:^{
[photoViewController creatContentWithImages:images andCurrentPage:row];
}];
- 在循环中,您总是使用
currentPage
而不是i
ivar
- 您将
imageArray
发送到createcontentwithnumberofpage
方法,但
由于某些原因,此数组在此处被新数据覆盖(I
假设数据相同)
- 还不清楚为什么要执行
[self.view addSubview:
pageScrollView]
-UIScrollView是以编程方式创建的吗?但它发生在哪个地方
- 使用框架进行操作时,应使用UIScrollView框架,
不是UIView,如果您的滚动大小与UIView不同,则
设计也将被打破
我对它进行了更改并改进了一些东西,所以让我们看看这个(我发布了所有photoviewercontroller.m文件)
#导入“photoviewercontroller.h”
@photoviewercontroller的实现
-(id)initWithNibName:(NSString*)nibNameOrNil bundle:(NSBundle*)nibBundleOrNil
{
self=[super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
如果(自我){
//自定义初始化
}
回归自我;
}
-(无效)viewDidLoad
{
[超级视图下载];
//从nib加载视图后,执行任何其他设置。
}
-(无效)未收到记忆警告
{
[超级记忆警告];
//处置所有可以重新创建的资源。
}
-(void)creatContentWithImages:(NSArray*)imageArray和currentPage:(NSInteger)currentPage{
//我以编程方式创建UIScrollView,如果您想使用xib,只需删除带有RM注释的行即可。
//xib层次结构中有两个视图-UIScrollView向下和UIPageView上方
self.pageScrollView=[[UIScrollView alloc]initWithFrame:self.view.frame];//RM
self.pageScrollView.PaginEnabled=YES;//RM
self.pageControl.numberOfPages=imageArray.count;
self.pageControl.currentPage=currentPage;
[self.pageScrollView setContentSize:CGSizeMake(self.pageScrollView.frame.size.width*imageArray.count,self.pageScrollView.frame.size.height)];
self.pageScrollView.delegate=self;//RM
[self.view insertSubview:self.pageScrollView索引:0];//RM
for(int i=0;i[self presentViewController:photosViewController animated:YES completion:^{
[photoViewController creatContentWithImages:images andCurrentPage:row];
}];
#import "PhotosViewerController.h"
@implementation PhotosViewerController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void) creatContentWithImages:(NSArray*)imageArray andCurrentPage:(NSInteger)currentPage{
// I create UIScrollView programmatically, if you want to use xib then just remove lines with RM comment.
// There are two views in xib hierarchy - UIScrollView downward and UIPageView above
self.pageScrollView = [[UIScrollView alloc] initWithFrame:self.view.frame]; //RM
self.pageScrollView.pagingEnabled = YES; //RM
self.pageControl.numberOfPages = imageArray.count;
self.pageControl.currentPage = currentPage;
[self.pageScrollView setContentSize:CGSizeMake(self.pageScrollView.frame.size.width * imageArray.count, self.pageScrollView.frame.size.height)];
self.pageScrollView.delegate = self;//RM
[self.view insertSubview:self.pageScrollView atIndex:0]; //RM
for (int i = 0; i < imageArray.count; i++) //not <=, just <
{
UIImage *img = [imageArray objectAtIndex:i];// not sure whether imageArray contains UIImage's or NSString, so if here NSString the create UIImage in appropriate manner. I've tested it with UIImage's
UIImageView *fullScreen = [[UIImageView alloc] initWithImage:img];
[fullScreen setContentMode:UIViewContentModeScaleAspectFit];
fullScreen.frame = CGRectMake(i*self.pageScrollView.frame.size.width, 0, self.pageScrollView.frame.size.width, self.pageScrollView.frame.size.height);
[self.pageScrollView addSubview:fullScreen];
}
[self scrollToPage:currentPage animated:NO]; // scroll to corresponding page
}
- (void)scrollViewDidScroll: (UIScrollView *) sView
{
CGFloat offset = self.pageScrollView.contentOffset.x;
CGFloat pageSize = self.pageScrollView.frame.size.width;
int page = floor((offset + (pageSize/2)) / pageSize);
self.pageControl.currentPage = page;
}
- (IBAction)changeThePage:(id)sender
{
NSLog(@"Change");
[self scrollToPage:self.pageControl.currentPage animated:YES];
}
- (void)scrollToPage:(NSInteger)page animated:(BOOL)animated{
CGRect pageRect = CGRectMake(page * self.pageScrollView.frame.size.width, 0, self.pageScrollView.frame.size.width, self.pageScrollView.frame.size.height);
[self.pageScrollView scrollRectToVisible: pageRect animated: animated];
[self.pageControl setCurrentPage:page];
}
@end