UIView に触れたときにオブジェクトを作成したい。しかし、指を上げなくても新しいオブジェクトを移動できるようにしたいのです。touched イベントを新しいオブジェクトに渡そうとしましたが、うまくいきません。
それを行う方法はありますか?
新しく生成されたすべてのビューの HolderView として機能する UIView のサブクラスを派生させる必要があります。また、新しいビューが生成されると、新しいビューは指を上げていなくても移動します。
次のコードでそれを行います。必要に応じて後で微調整します。
@interface HolderView : UIView
@property(nonatomic,retain)UIView *newView;
@end
@implementation HolderView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint touchPoint = [touch locationInView:self];
if (CGRectContainsPoint(self.bounds, touchPoint)) {
CGRect r = CGRectMake(touchPoint.x-50, touchPoint.y-50, 100, 100);
self.newView = [[[UIView alloc] initWithFrame:r]autorelease];
self.newView.backgroundColor= [UIColor cyanColor];
[self addSubview:self.newView];
}
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
if (self.newView!=nil) {
UITouch *touch = [touches anyObject];
CGPoint touchPoint = [touch locationInView:self];
self.newView.center = touchPoint;
}
}
@end
ビューが存在する他のオブジェクトに触れている間、タッチが最後に問題を引き起こしていると思います。そのため、UIViewで1つのUIImageviewを使用する必要があるため、可動オブジェクトでタッチを識別できず、タッチを検出してからあなたはあなたの望む出力を達成することができます
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [[event allTouches] anyObject];
CGPoint imgPop = [touch locationInView:imgPopup];
if ([imgPopup pointInside:imgPop withEvent:event])
{
CGPoint imgReply = [touch locationInView:viewComment];
if ([viewComment pointInside:imgReply withEvent:event])
{
} else {
viewPopup.hidden = TRUE;
}
}
}
これは私がこのコードを管理する方法であり、タッチ時にビューを閉じるためのものですが、目的に合わせて変更して使用できます。