我试图找出当touchesmoved离开当前所选按钮的框架时如何设置按钮不突出显示。见下面的代码。下面的代码应该允许单独按下三个按钮中的任何一个并进行翻转。我遇到的问题是,当按下按钮时,例如使用touchesmoved按钮调用动作,但是当滑动离开按钮框时,从不将按钮设置为不突出显示。
提前致谢,
阿扎
- (void)touchesMoved: (NSSet *)touches withEvent:(UIEvent *)event {
for(UITouch *t in touches) {
CGPoint location = [t locationInView:t.view];
if((CGRectContainsPoint(Button1.frame, location)) && (!Button1.isHighlighted))
{
if (!Button1.isHighlighted){
[Button1 setHighlighted:YES];
[self doAction1];
}else{
[Button1 setHighlight:NO];
}
}
if((CGRectContainsPoint(Button2.frame, location)) && (!Button2.isHighlighted))
{
if (!Button2.isHighlighted){
[Button2 setHighlighted:YES];
[self doAction2];
}else{
[Button2 setHighlight:NO];
}
}
if((CGRectContainsPoint(Button3.frame, location)) && (!Button3.isHighlighted))
{
if (!Button3.isHighlighted){
[Button3 setHighlighted:YES];
[self doAction3];
}else{
[Button3 setHighlight:NO];
}
}
}
- (void)touchesBegan: (NSSet *)touches withEvent:(UIEvent *)event {
for(UITouch *t in touches) {
CGPoint location = [t locationInView:t.view];
if(CGRectContainsPoint(Button1.frame, location))
{
if (!Button1.isHighlighted){
[Button1 setHighlighted:YES];
[self doAction1];
}
}
if(CGRectContainsPoint(Button2.frame, location))
{
if (!Button2.isHighlighted){
[Button2 setHighlighted:YES];
[self doAction2];
}
}
if(CGRectContainsPoint(Button3.frame, location))
{
if (!Button3.isHighlighted){
[Button3 setHighlighted:YES];
[self doAction3];
}
}
}
- (void)touchesEnded: (NSSet *)touches withEvent:(UIEvent *)event {
for (UITouch *t in touches){
CGPoint location = [t locationInView:self.view];
if(CGRectContainsPoint(Button1.frame, location)) {
[Button1 setHighlighted:NO];
} else if(CGRectContainsPoint(Button2.frame, location)) {
[Button2 setHighlighted:NO];
} else if(CGRectContainsPoint(Button3.frame, location)) {
[Button3 setHighlighted:NO];
}
}
}
答案 0 :(得分:0)
好的,我知道我以前处理过同样的问题。我还在代码中的自己的注释中看到了对它的引用。我附加了一大堆非常古老的代码,我编写这些代码来处理模拟按钮(类似于你正在做的事情)。也许仔细观察会有所帮助:
typedef struct {
BOOL enabled;
BOOL isActivated;
NSTimeInterval activatedStartTime;
NSTimeInterval holdTime;
CGRect frame;
UIImageView *glowImage;
BOOL processPending;
SEL callWhenTouched;
} SIM_BUTTON;
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
int fingers = [touches count];
UITouch *touch;
CGPoint touchPoint;
int i, j;
for (i=0; i<fingers; i++)
{
touch = [[touches allObjects] objectAtIndex:i];
touchPoint = [touch locationInView:self.view];
for ( j=0; j<SIM_BUTTON_COUNT; j++)
{
if ( simButton[j].enabled && CGRectContainsPoint( simButton[j].frame, touchPoint) )
{
simButton[j].isActivated=YES;
simButton[j].activatedStartTime = [NSDate timeIntervalSinceReferenceDate];
simButton[j].processPending = YES;
}
}
}
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
int fingers = [touches count];
UITouch *touch;
CGPoint touchPoint;
CGPoint previousTouchPoint;
int i, j;
for (i=0; i<fingers; i++)
{
touch = [[touches allObjects] objectAtIndex:i];
touchPoint = [touch locationInView:self.view];
previousTouchPoint = [touch previousLocationInView:self.view];
for ( j=0; j<SIM_BUTTON_COUNT; j++)
{
if ( simButton[j].enabled && simButton[j].isActivated && CGRectContainsPoint( simButton[j].frame, touchPoint) && CGRectContainsPoint( simButton[j].frame, previousTouchPoint) )
{
simButton[j].isActivated=YES;
}
else
if ( simButton[j].enabled && !simButton[j].isActivated && CGRectContainsPoint( simButton[j].frame, touchPoint) && CGRectContainsPoint( simButton[j].frame, previousTouchPoint) )
{
simButton[j].activatedStartTime = [NSDate timeIntervalSinceReferenceDate];
simButton[j].isActivated=YES;
}
else
if ( simButton[j].enabled && simButton[j].isActivated && !CGRectContainsPoint( simButton[j].frame, touchPoint) && CGRectContainsPoint( simButton[j].frame, previousTouchPoint) )
{
simButton[j].isActivated=NO;
simButton[j].activatedStartTime = (NSTimeInterval)0.0;
}
else
if ( simButton[j].enabled && !simButton[j].isActivated && CGRectContainsPoint( simButton[j].frame, touchPoint) && !CGRectContainsPoint( simButton[j].frame, previousTouchPoint) )
{
simButton[j].isActivated=YES;
simButton[j].activatedStartTime = [NSDate timeIntervalSinceReferenceDate];
simButton[j].processPending = YES;
}
//
// If the user touched the SCAN button and then slid their finger off of the SCAN button
//
if ( scannerActive==YES && simButton[RIGHT_SCAN_BUTTON].isActivated==NO && CGRectContainsPoint( simButton[RIGHT_SCAN_BUTTON].frame, previousTouchPoint) )
{
phraseMode = EXTERNAL_SCAN_PHRASES; // Default
}
}
}
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
int fingers = [touches count];
UITouch *touch;
CGPoint touchPoint;
CGPoint previousTouchPoint;
int i, j;
for (i=0; i<fingers; i++)
{
touch = [[touches allObjects] objectAtIndex:i];
touchPoint = [touch locationInView:self.view];
previousTouchPoint = [touch previousLocationInView:self.view];
for ( j=0; j<SIM_BUTTON_COUNT; j++)
{
if ( simButton[j].enabled && simButton[j].isActivated && (CGRectContainsPoint( simButton[j].frame, touchPoint) || CGRectContainsPoint( simButton[j].frame, previousTouchPoint)) )
{
simButton[j].isActivated=NO;
simButton[j].activatedStartTime = (NSTimeInterval)0.0;
}
}
}
}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
[self touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event];
}