2011-02-03 44 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

相關問題