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を呼び出しました。それでもまったく同じ結果が得られました...これは試行錯誤の数え切れないほどの試みの1つに過ぎず、ごめんなさい、これは厄介なものの1つです...

誰かが解決策を手に入れたら、それを大いに感謝します。

よろしくお願いします、トム

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 に答える