0

我正在尝试制作一个用户可以在屏幕上滑动以在帖子之间浏览的场景。帖子既可以是带有文本的图像,也可以只是一个注释,并且视图会根据出现的情况而改变。

获取过程非常完美。无论我向右还是向左滑动,它都会得到正确的帖子。问题是旧视图不会消失并且视图重叠。当您从便笺转到照片时,这尤其令人烦恼,反之亦然,因为尺寸不同...

这是代码:

- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@" GETRESULT %@   POSTNUMBER %d", getResult, postNumber);
Post *postInfo = [[Post alloc] init];

postInfo = [getResult objectAtIndex:postNumber];

UITextView *postText = [[UITextView alloc] init];
imgView = [[UIImageView alloc] init];

NSString *getImageString = postInfo.attachments;
if(getImageString){
    postText = [[UITextView alloc] init];
    postText.text = postInfo.noteText;
    [postText setFrame:CGRectMake(20, 320, 280, 80)];
    NSLog(@"IMG1");
}else {
    postText = [[UITextView alloc] init];
    postText.text = postInfo.noteText;
    [postText setFrame:CGRectMake(20, 10, 280, 240)];
    NSLog(@"TEXT1");
}
[self.view addSubview:postText];
SHOWHUD(self.view);
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{

        NSURL *url = [NSURL URLWithString:getImageString];
        NSData *data = [NSData dataWithContentsOfURL:url];
        UIImage *img = [[UIImage alloc] initWithData:data];
        [imgView setFrame:CGRectMake(20, 10, 280, 300)];
        [imgView setContentMode:UIViewContentModeScaleAspectFit];
        [imgView setImage:img];

    dispatch_async(dispatch_get_main_queue(), ^{   
        [self.view addSubview:imgView];
        HIDEHUD(self.view);
    });
});


UISwipeGestureRecognizer *recognizerRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeRight:)];
[[self view] addGestureRecognizer:recognizerRight];

UISwipeGestureRecognizer *recognizerLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeLeft:)];
[recognizerLeft setDirection:UISwipeGestureRecognizerDirectionLeft];
[[self view] addGestureRecognizer:recognizerLeft];

// Do any additional setup after loading the view.
}

- (void)handleSwipeRight:(UISwipeGestureRecognizer *)gestureRecognizer{
NSLog(@"SWIPE RIGHT");
if(postNumber > 0){
    postNumber--;
    Post *postInfo = [[Post alloc] init];

    postInfo = [getResult objectAtIndex:postNumber];

    UITextView *postText = [[UITextView alloc] init];
    imgView = [[UIImageView alloc] init];

    NSString *getImageString = postInfo.attachments;
    if(getImageString){
        [postText removeFromSuperview];
        postText = [[UITextView alloc] init];
        postText.text = postInfo.noteText;
        [postText setFrame:CGRectMake(20, 320, 280, 80)];
        NSLog(@"IMG1");
    }else {
        [postText removeFromSuperview];
        postText = [[UITextView alloc] init];
        postText.text = postInfo.noteText;
        [postText setFrame:CGRectMake(20, 10, 280, 240)];
        NSLog(@"TEXT1");
    }
    [self.view addSubview:postText];
    SHOWHUD(self.view);
    dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
        if (getImageString) {

        NSURL *url = [NSURL URLWithString:getImageString];
        NSData *data = [NSData dataWithContentsOfURL:url];
        UIImage *img = [[UIImage alloc] initWithData:data];
        [imgView setFrame:CGRectMake(20, 10, 280, 300)];
        [imgView setContentMode:UIViewContentModeScaleAspectFit];
        [imgView setImage:img];
        }else {
            [imgView removeFromSuperview];
        }
        dispatch_async(dispatch_get_main_queue(), ^{   
            [self.view addSubview:imgView];
            HIDEHUD(self.view);
        });
    });
}

}

- (void)handleSwipeLeft:(UISwipeGestureRecognizer *)gestureRecognizer{
NSLog(@"SWIPE LEFT");
if(postNumber < [getResult count] - 1){
    postNumber++;

    Post *postInfo = [[Post alloc] init];

    postInfo = [getResult objectAtIndex:postNumber];

    UITextView *postText = [[UITextView alloc] init];
    imgView = [[UIImageView alloc] init];

    NSString *getImageString = postInfo.attachments;
    if(getImageString){
        [postText removeFromSuperview];
        postText = [[UITextView alloc] init];
        postText.text = postInfo.noteText;
        [postText setFrame:CGRectMake(20, 320, 280, 80)];
        NSLog(@"IMG1");
    }else {
        [postText removeFromSuperview];
        postText = [[UITextView alloc] init];
        postText.text = postInfo.noteText;
        [postText setFrame:CGRectMake(20, 10, 280, 240)];
        NSLog(@"TEXT1");
    }
    [self.view addSubview:postText];
    SHOWHUD(self.view);
    dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
        if(getImageString){
        NSURL *url = [NSURL URLWithString:getImageString];
        NSData *data = [NSData dataWithContentsOfURL:url];
        UIImage *img = [[UIImage alloc] initWithData:data];
        [imgView setFrame:CGRectMake(20, 10, 280, 300)];
        [imgView setContentMode:UIViewContentModeScaleAspectFit];
        [imgView setImage:img];
        }else {
            [imgView removeFromSuperview];
        }
        dispatch_async(dispatch_get_main_queue(), ^{   
            [self.view addSubview:imgView];
            HIDEHUD(self.view);
        });
    });

}
}

起初我只增加了 postNumber 并在滑动操作中调用了 viewDidLoad 。不过,这给了我完全相同的结果……这只是无数次尝试和错误尝试中的一种,很抱歉,这是比较混乱的尝试之一……

如果有人有解决方案,将不胜感激。

在此先感谢,汤姆

4

2 回答 2

0

你试过这个吗?

for (UIView * view in self.view.subviews) {
    if ([view isEqual:postText]||[view isEqual:imgView]) {
        [view removeFromSuperview];
    }

}
于 2012-08-21T08:55:57.303 回答
0

我无法从超级视图中删除变量,因为我是在 viewDidLoad 的新实例中完成的。我在这次调用 viewDidLoad 之前尝试这样做,它成功了!

很抱歉浪费您的时间...

汤姆

于 2012-08-21T11:07:51.280 回答