开发者

iPhone - My new view is blocking my toolbar

开发者 https://www.devze.com 2023-02-08 13:32 出处:网络
I have a problem with my app. With help by a tutorial I\'ve created a slideshow with pictures. I\'ve added a toolbar so it\'s possible to go back. The problem is that when the pictures are showing, th

I have a problem with my app. With help by a tutorial I've created a slideshow with pictures. I've added a toolbar so it's possible to go back. The problem is that when the pictures are showing, the toolbar disappear. I've been trying to google the problem and so on, but I can't solve it. In a "previous" class I create SlideShowViewController, and inside that class I have another one called SlideShowView. I hope this ain't to messy or stupid, cause I really need help.

Here is the code:

#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(s开发者_C百科wipeDistance, 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


Instead of this:

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

do that:

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

EDIT: Also don't forget to set the frame of slideShowView!

0

精彩评论

暂无评论...
验证码 换一张
取 消