2011-02-03 49 views
0

我的应用程序出现问题。在教程的帮助下,我创建了一个包含图片的幻灯片。我添加了一个工具栏,因此可以返回。问题是当图片显示时,工具栏消失。我一直在试图谷歌问题等,但我无法解决它。在“前一个”类中创建SlideShowViewController,并在该类中创建另一个名为SlideShowView的类。我希望这不是混乱或愚蠢的,因为我真的需要帮助。iPhone - 我的新视图阻止了我的工具栏

下面是代码:

#import "SlideShowViewController.h" 
#import "Pictures.h" 
@interface SlideShowView : UIView 
{ 
    NSArray * mImages; 
    UIImageView * mLeftImageView; 
    UIImageView * mCurrentImageView; 
    UIImageView * mRightImageView; 
    NSUInteger mCurrentImage; 
    Pictures *picRef; 
    SlideShowViewController *slideRef; 
    BOOL mSwiping; 
    CGFloat mSwipeStart; 
} 
- (id)initWithImages:(NSArray *)inImages; 
@end // SlideShowView 


#pragma mark - 
//#import "SlideShowViewController.h" 
@implementation SlideShowView 

- (UIImageView *)createImageView:(NSUInteger)inImageIndex 
{ 
    if (inImageIndex >= [mImages count]) 
    { 
     return nil; 
    } 

    UIImageView * result = [[UIImageView alloc] initWithImage:[mImages objectAtIndex:inImageIndex]]; 
    result.opaque = YES; 
    result.userInteractionEnabled = NO; 
    result.backgroundColor = [UIColor whiteColor]; 
    result.contentMode = UIViewContentModeScaleAspectFit; 
    result.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 

    return result; 
} 

- (id)initWithImages:(NSArray *)inImages 
{ 
    if (self = [super initWithFrame:CGRectZero]) 
    { 
     mImages = [inImages retain]; 

     NSUInteger imageCount = [inImages count]; 
     if (imageCount > 0) 
     { 
      mCurrentImageView = [self createImageView:0]; 

      [self addSubview:mCurrentImageView]; 

      if (imageCount > 1) 
      { 
       mRightImageView = [self createImageView:1]; 
       [self addSubview:mRightImageView]; 
      } 

     } 

     self.opaque = YES; 
     self.backgroundColor = [UIColor whiteColor]; 
     self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
    } 

    return self; 
} 

- (void)dealloc 
{ 
    [mImages release]; 
    [super dealloc]; 
} 



- (void)layoutSubviews 
{ 
    if (mSwiping) 
     return; 

    CGSize contentSize = self.frame.size; 
    mLeftImageView.frame = CGRectMake(-contentSize.width, 0.0f, contentSize.width, contentSize.height); 
    mCurrentImageView.frame = CGRectMake(0.0f, 0.0f, contentSize.width, contentSize.height); 
    mRightImageView.frame = CGRectMake(contentSize.width, 0.0f, contentSize.width, contentSize.height); 


} 

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    if ([touches count] != 1){ 
     return; 
    } 

    mSwipeStart = [[touches anyObject] locationInView:self].x; 
    mSwiping = YES; 

    mLeftImageView.hidden = NO; 
    mCurrentImageView.hidden = NO; 
    mRightImageView.hidden = NO; 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    if (! mSwiping || [touches count] != 1) 
     return; 

    CGFloat swipeDistance = [[touches anyObject] locationInView:self].x - mSwipeStart; 

    CGSize contentSize = self.frame.size; 

    mLeftImageView.frame = CGRectMake(swipeDistance - contentSize.width, 0.0f, contentSize.width, contentSize.height); 
    mCurrentImageView.frame = CGRectMake(swipeDistance, 0.0f, contentSize.width, contentSize.height); 
    mRightImageView.frame = CGRectMake(swipeDistance + contentSize.width, 0.0f, contentSize.width, contentSize.height); 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    if (! mSwiping) 
     return; 

    CGSize contentSize = self.frame.size; 

    NSUInteger count = [mImages count]; 

    CGFloat swipeDistance = [[touches anyObject] locationInView:self].x - mSwipeStart; 
    if (mCurrentImage > 0 && swipeDistance > 50.0f) 
    { 
     [mRightImageView removeFromSuperview]; 
     [mRightImageView release]; 

     mRightImageView = mCurrentImageView; 
     mCurrentImageView = mLeftImageView; 

     mCurrentImage--; 
     if (mCurrentImage > 0) 
     { 
      mLeftImageView = [self createImageView:mCurrentImage - 1]; 
      mLeftImageView.hidden = YES; 

      [self addSubview:mLeftImageView]; 
     } 
     else 
     { 
      mLeftImageView = nil; 
     } 
    } 
    else if (mCurrentImage < count - 1 && swipeDistance < -50.0f) 
    { 
     [mLeftImageView removeFromSuperview]; 
     [mLeftImageView release]; 

     mLeftImageView = mCurrentImageView; 
     mCurrentImageView = mRightImageView; 

     mCurrentImage++; 
     if (mCurrentImage < count - 1) 
     { 
      mRightImageView = [self createImageView:mCurrentImage + 1]; 
      mRightImageView.hidden = YES; 

      [self addSubview:mRightImageView]; 
     } 
     else 
     { 
      mRightImageView = nil; 
     } 
    } 

    [UIView beginAnimations:@"swipe" context:NULL]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 
    [UIView setAnimationDuration:0.3f]; 

    mLeftImageView.frame = CGRectMake(-contentSize.width, 0.0f, contentSize.width, contentSize.height); 
    mCurrentImageView.frame = CGRectMake(0.0f, 0.0f, contentSize.width, contentSize.height); 
    mRightImageView.frame = CGRectMake(contentSize.width, 0.0f, contentSize.width, contentSize.height); 

    [UIView commitAnimations]; 
    mSwiping = NO; 
} 



@end // SlideShowView 


#pragma mark - 


@implementation SlideShowViewController 
@synthesize toolbar; 

-(IBAction) goBack:(id) sender{ 
    [self.parentViewController dismissModalViewControllerAnimated:YES]; 
    } 

- (id)init 
{ 

    if (self = [super initWithNibName:nil bundle:nil]) 
    { 
     NSArray * images = [NSArray arrayWithObjects:[UIImage imageNamed:@"bifColor.png"], 
          [UIImage imageNamed:@"DSCF1600.jpg"], 
          [UIImage imageNamed:@"refresh.png"], 
          [UIImage imageNamed:@"DSCF1601.jpg"], nil]; 
     self.view = [[[SlideShowView alloc] initWithImages:images] autorelease]; 
    } 

    return self; 
} 

@end 

回答

0

取而代之的是:

self.view = [[[SlideShowView alloc] initWithImages:images] autorelease]; 

做到这一点:

UIView* slideShowView = [[[SlideShowView alloc] initWithImages:images] autorelease]; 
[self.view addSubview:slideShowView]; 

编辑:另外别忘了设置框架slideShowView!

+0

看来我不能将子视图添加到SlideShowViewController。在调试器中,它表示' - [UIViewController _loadViewFromNibNamed:bundle:]加载了“SlideShowViewController”笔尖,但未设置视图插口。 我应该在哪里设置框架? Thx为您提供帮助:) – Emil 2011-02-03 13:46:50

相关问题