ユーザーがピンチしたときに、個々の UITableViewCell のサイズを変更しようとしています。「ピンチ」が十分に大きくなったら、セグエを実行したいと思います。
したがって、cellForRowAtIndexPath で。UIPinchGestureRecognizer を割り当て/初期化し、セルにアタッチします。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
/** adding info to the cell **/
UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(makeBiggerCell:)];
[cell addGestureRecognizer:pinchGesture];
return cell;
}
次のメソッドでは、ユーザーのジェスチャーに基づいて選択した行の高さを計算 (および設定) し、それを「再描画」したいと考えていました。私が言ったように、ジェスチャが終了し、セルが十分に大きい場合は、セグエを実行したいと思います。
- (void)makeBiggerCell:(UIPinchGestureRecognizer *)gesture {
if (gesture.state == UIGestureRecognizerStateChanged){
// I have a private property of NSIndexPath in order to keep
// track of the selected row.
self.selectedIndexPath = [self.tableView indexPathForCell:(UITableViewCell *)sender.view];
CGPoint windowPoint = [gesture locationOfTouch:1 inView:nil];
CGPoint tablePoint = [gesture locationInView:self.tableView];
self.sizeOfCell = fabsf(tablePoint.y - windowPoint.y);
// the MINIMUM_CELL_SIZE is the regular size of the cell
// this conditional tries to avoid small tableviewcells
// IMPORTANT: as long as the user keeps his fingers on the cell
// the 'resize' happens
if (self.sizeOfCell > MINIMUM_CELL_SIZE)
[self.tableView reloadRowsAtIndexPaths:@[self.selectedIndexPath] withRowAnimation:UITableViewRowAnimationNone];
}else if (sender.state == UIGestureRecognizerStateEnded){
if (sender.scale >=5) {
[self performSegueWithIdentifier:@"MySegue" sender:sender.view];
}
}
}
最後に、選択した行の高さを設定した場所
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
if (self.selectedIndexPath && self.selectedIndexPath.row == indexPath.row && self.sizeOfCell)
return self.sizeOfCell + MINIMUM_CELL_SIZE;
else
return MINIMUM_CELL_SIZE;
}
2 つのプロパティ (sizeOfCell と selectedIndexPath) を持つこと以外の問題は、uitableviewcell のサイズを変更する外観であり、十分に「滑らか」に見えません。セルをつまんでセグエを実行すると、iOS 7 の天気アプリのようなものを実現したいと考えています。
皆さんが私の問題に対するよりクリーンな解決策を持っているなら、私はとても感謝しています! :]