我正在尝试平移和放大图像。由于 C4 中还没有平移手势,我想我可以在开始时使用 slider 。
所以我将平移手势添加到照片中,如下所示:
-(void)photoToCrop{
photoTaken=[C4Image imageNamed"image.jpg"];
photoTaken.height=self.canvas.height;
photoTaken.origin=CGPointMake(0, 0);
[self.canvas addImage:photoTaken];
[self addGestureAN name"pan" action"movePhoto:"];
}
-(void)movePhotoUIPanGestureRecognizer *)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];
}
}
我只在用户实际点击图像而不是外部任何地方时使用平移手势(那是那里的 if 语句)
它本身工作得很好。
然后我还附加了一个 slider 来缩放相同的图像:
-(void)sliderSetup{
[self createAddSliderObjects];
zoomSlider.minimumValue=0.52f;
zoomSlider.maximumValue=10.0f;
//scalefactor=1;
zoomSlider.value=1.0f;
}
-(void)createAddSliderObjects{
sliderLabel=[C4Label labelWithText"1.0"];
sliderLabel.textColor=navBarColor;
zoomSlider=[C4Slider slider:CGRectMake(0, 0, self.canvas.width-20, 20)];
//positioning
sliderLabel.center=CGPointMake(self.canvas.width/2,self.canvas.height-NavBarHeight-50);
zoomSlider.center=CGPointMake(sliderLabel.center.x,sliderLabel.center.y+10);
//set up action
[zoomSlider runMethod"sliderWasUpdated:"
target:self
forEvent:VALUECHANGED];
[self.canvas addObjects[sliderLabel, zoomSlider]];
}
-(void)sliderWasUpdatedC4Slider*)theSlider{
//update the label to reflect current scale factor
sliderLabel.text=[NSString stringWithFormat"%4.2f", theSlider.value];
[sliderLabel sizeToFit];
//scale the image
C4Log(@"slider:%f",theSlider.value);
photoTaken.height=self.canvas.height*theSlider.value;
photoTaken.center=self.canvas.center;
}
它本身也可以正常工作。
但是试图同时使用两者是行不通的。在这种情况下,只有平移图像有效,但 slider 不会发生任何事情。似乎它没有得到任何触发器......
有人建议我还能尝试什么吗?
Best Answer-推荐答案 strong>
问题是您正在向 canvas 添加平移手势,而 C4Slider 的控制方法实际上是平移手势。因此,附加到 Canvas 的手势优先,使用手势移动照片,并且不将该手势传递给 C4Slider 以使其移动。
简单的解决方案是将平移手势附加到 C4Image 上,这样 slider 和图像就不会监听相同的事件。
我已经折叠了一些函数以使示例更易于理解。
#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 addGestureAN 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)sliderWasUpdatedC4Slider*)theSlider{
photoTaken.height=self.canvas.height*theSlider.value;
photoTaken.center=self.canvas.center;
}
@end
关于ios - [C4]平移识别器和 slider 之间的冲突,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/19428448/
|