長按開始時 addSubview 一個新 UIImageView,結束時呼叫 [img removeFromSuperview] 但圖片不消失,NSLog 正常輸出。
hold: 每次觸發都 **new 一個** UIImageView *img。
Began 階段加入的是 **第一個實例**,
Ended 階段嘗試移除的是 **第二個新建實例**(從未加入視圖層級),故無效果。
#define kTagPhotoImageView 999
- (void)hold:(UILongPressGestureRecognizer *)sender {
if (sender.state == UIGestureRecognizerStateBegan) {
NSLog(@"state began");
UIImageView *img = [[UIImageView alloc] initWithImage:self.photo];
img.userInteractionEnabled = NO;
img.tag = kTagPhotoImageView;
[self.view addSubview:img];
} else if (sender.state == UIGestureRecognizerStateEnded) {
NSLog(@"state ended");
UIImageView *img = (UIImageView *)[self.view viewWithTag:kTagPhotoImageView];
[img removeFromSuperview];
}
}
@property (nonatomic, strong) UIImageView *fullScreenImageView;,直接操作同一實例。NSMutableArray 存放所有動態建立的 imageView,結束時遍歷移除。tag、屬性或容器保持引用,勿在 Ended 重新 alloc。Began → Changed... → Ended,狀態機邏輯要清晰。掌握「同一實例進、同一實例出」,動態視圖增刪不再失效。