Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone iOS-从plist数据滚动图像_Iphone_Objective C_Ios_Xcode_Ipad - Fatal编程技术网

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