5

私のUITableViewCellには、ユーザーが行をクリックするたびに180度回転したいUIImageViewがあります(didSelectRowAtIndexPath:)。コードは非常に単純です:

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
 {
     UITableViewCell *curCell = [self.tableView cellForRowAtIndexPath:indexPath];
     UIImageView *imgArrow = (UIImageView*)[curCell viewWithTag:3];
     [UIView animateWithDuration:0.3 animations:^{imgArrow.transform = CGAffineTransformMakeRotation(M_PI);}];
 }

問題は、これが常に1回だけ発生することです。ユーザーが最初にセルをクリックすると、imgArrowは適切に回転しますが、セルを2回クリックしても元に戻りません。なぜ?

手伝ってくれてありがとう!

4

2 に答える 2

10

問題は、ビューの変換プロパティが、ビューの元の変換から指定された程度に回転することです。したがって、ボタンが180度回転すると、現在の場所(180)から180に回転しようとするため、これを再度呼び出しても何も起こりません。

そうは言っても、変換をチェックするにはifステートメントを作成する必要があります。180の場合は、回転を「0」に設定し、その逆も同様です。

これを実現する簡単な方法は、を使用することBOOLです。

if (shouldRotate){
     [UIView animateWithDuration:0.3 animations:^{imgArrow.transform = CGAffineTransformMakeRotation(M_PI);}];
     shouldRotate = NO;
}else{
     [UIView animateWithDuration:0.3 animations:^{imgArrow.transform = CGAffineTransformMakeRotation(0);}];
     shouldRotate = YES;
}
于 2012-08-27T14:16:24.113 に答える
1

変換を設定しているだけです。imgArrow.transform複数の変換を適用するには、変換行列に目的の新しい変換を乗算する必要があります。これを行うために使用できますCGAffineTransformConcat()

CGAffineTransform currTransform = [imgArrow transform];
CGAffineTransform newTransform = CGAffineTransformConcat(currTransform, CGAffineTransformMakeRotation(M_PI));
[imgArrow setTransform:newTransform];
于 2012-08-27T14:15:46.527 に答える