Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios [C4]平移识别器和滑块之间的冲突_Ios_Objective C_C4 - Fatal编程技术网

Ios [C4]平移识别器和滑块之间的冲突

Ios [C4]平移识别器和滑块之间的冲突,ios,objective-c,c4,Ios,Objective C,C4,我正在尝试平移和放大图像。由于平移手势在C4中还不可用,我想我可以在开始时使用滑块。 因此,我在照片中添加了平移手势,如下所示: -(void)photoToCrop{ photoTaken=[C4Image imageNamed:@"image.jpg"]; photoTaken.height=self.canvas.height; photoTaken.origin=CGPointMake(0, 0); [self.canvas addImage:photoT

我正在尝试平移和放大图像。由于平移手势在C4中还不可用,我想我可以在开始时使用滑块。 因此,我在照片中添加了平移手势,如下所示:

-(void)photoToCrop{
    photoTaken=[C4Image imageNamed:@"image.jpg"];
    photoTaken.height=self.canvas.height;
    photoTaken.origin=CGPointMake(0, 0);
    [self.canvas addImage:photoTaken];
    [self addGesture:PAN name:@"pan" action:@"movePhoto:"];

}
-(void)movePhoto:(UIPanGestureRecognizer *)recognizer {
    CGPoint thePoint=[recognizer locationInView:self.view];
    //C4Log(@"current position:%f,%f",thePoint.x, thePoint.y);
    if (thePoint.x>photoTaken.origin.x &&thePoint.x<photoTaken.origin.x+photoTaken.width && thePoint.y>photoTaken.origin.y &&thePoint.y<photoTaken.origin.y+photoTaken.height) {
        C4Log(@"touched inside+moved");
        [photoTaken move:recognizer];
    }

}
它本身也工作得很好。 但试图同时使用两者是行不通的。在这种情况下,只有平移图像才有效,但滑块从未发生任何变化。似乎它从来没有得到任何触发。。。。
有人建议我还可以尝试什么吗?

问题是您正在向
画布添加平移手势,而
C4Slider
的控制方法实际上是平移手势。因此,附加到画布上的手势采用先例,使用该手势移动照片,而不是将该手势传递到
C4Slider
以使其移动

简单的解决方案是将平移手势附加到
C4Image
,这样滑块和图像就不会监听相同的事件

我折叠了一些函数,使示例更容易理解

#import "C4WorkSpace.h"

@implementation C4WorkSpace{
    C4Image * photoTaken;
    C4Slider * zoomSlider;
}

-(void)setup{

    photoTaken=[C4Image imageNamed:@"C4Sky.png"];
    photoTaken.width=self.canvas.width;
    photoTaken.origin=CGPointMake(0, 0);
    [self.canvas addImage:photoTaken];
    [photoTaken addGesture:PAN name:@"pan" action:@"move:"];

    zoomSlider=[C4Slider slider:CGRectMake(0, 0, self.canvas.width-20, 20)];
    [self.canvas addUIElement: zoomSlider];
    [zoomSlider runMethod:@"sliderWasUpdated:" target:self forEvent:VALUECHANGED];

}

-(void)sliderWasUpdated:(C4Slider*)theSlider{    
    photoTaken.height=self.canvas.height*theSlider.value;
    photoTaken.center=self.canvas.center;
}

@end

我不知道我是否做错了什么,但是如果我运行这个示例,只有平移可以工作,但是我不能更改滑块值……奇怪。如果我将这段代码粘贴到一个新项目中,它就可以正常工作。你是在新项目中使用它还是在你的大项目中使用它?我两个都试过了,但都不起作用。。。在哪个iOS/XCode/…中有什么区别吗。。。是吗?可能吧。我正在使用iOS6测试xcode4.6。我注意到您使用的是XCode 5。我还没有测试过。对不起,是的,我在XCode 5和iOS 7中。。。所以我可以试着用一个步进器看看它是否有效。。。
#import "C4WorkSpace.h"

@implementation C4WorkSpace{
    C4Image * photoTaken;
    C4Slider * zoomSlider;
}

-(void)setup{

    photoTaken=[C4Image imageNamed:@"C4Sky.png"];
    photoTaken.width=self.canvas.width;
    photoTaken.origin=CGPointMake(0, 0);
    [self.canvas addImage:photoTaken];
    [photoTaken addGesture:PAN name:@"pan" action:@"move:"];

    zoomSlider=[C4Slider slider:CGRectMake(0, 0, self.canvas.width-20, 20)];
    [self.canvas addUIElement: zoomSlider];
    [zoomSlider runMethod:@"sliderWasUpdated:" target:self forEvent:VALUECHANGED];

}

-(void)sliderWasUpdated:(C4Slider*)theSlider{    
    photoTaken.height=self.canvas.height*theSlider.value;
    photoTaken.center=self.canvas.center;
}

@end