菜鸟教程小白 发表于 2022-12-12 15:44:34

ios - [C4]平移识别器和 slider 之间的冲突


                                            <p><p>我正在尝试平移和放大图像。由于 C4 中还没有平移手势,我想我可以在开始时使用 slider 。
所以我将平移手势添加到照片中,如下所示:</p>

<pre><code>-(void)photoToCrop{
    photoTaken=;
    photoTaken.height=self.canvas.height;
    photoTaken.origin=CGPointMake(0, 0);
    ;
    ;

}
-(void)movePhoto:(UIPanGestureRecognizer *)recognizer {
    CGPoint thePoint=;
    //C4Log(@&#34;current position:%f,%f&#34;,thePoint.x, thePoint.y);
    if (thePoint.x&gt;photoTaken.origin.x &amp;&amp;thePoint.x&lt;photoTaken.origin.x+photoTaken.width &amp;&amp; thePoint.y&gt;photoTaken.origin.y &amp;&amp;thePoint.y&lt;photoTaken.origin.y+photoTaken.height) {
      C4Log(@&#34;touched inside+moved&#34;);
      ;
    }

}
</code></pre>

<p>我只在用户实际点击图像而不是外部任何地方时使用平移手势(那是那里的 if 语句)
它本身工作得很好。
然后我还附加了一个 slider 来缩放相同的图像:</p>

<pre><code>-(void)sliderSetup{
    ;
    zoomSlider.minimumValue=0.52f;
    zoomSlider.maximumValue=10.0f;
    //scalefactor=1;
    zoomSlider.value=1.0f;

}
-(void)createAddSliderObjects{
    sliderLabel=;
    sliderLabel.textColor=navBarColor;
    zoomSlider=;

    //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:@&#34;sliderWasUpdated:&#34;
                   target:self
               forEvent:VALUECHANGED];
    ];
}
-(void)sliderWasUpdated:(C4Slider*)theSlider{
    //update the label to reflect current scale factor
    sliderLabel.text=;
    ;

    //scale the image
    C4Log(@&#34;slider:%f&#34;,theSlider.value);
    photoTaken.height=self.canvas.height*theSlider.value;
    photoTaken.center=self.canvas.center;
}
</code></pre>

<p>它本身也可以正常工作。
但是试图同时使用两者是行不通的。在这种情况下,只有平移图像有效,但 slider 不会发生任何事情。似乎它没有得到任何触发器......
有人建议我还能尝试什么吗?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>问题是您正在向 <code>canvas</code> 添加平移手势,而 <code>C4Slider</code> 的控制方法实际上是平移手势。因此,附加到 Canvas 的手势优先,使用手势移动照片,并且不将该手势传递给 <code>C4Slider</code> 以使其移动。 </p>

<p>简单的解决方案是将平移手势附加到 <code>C4Image</code> 上,这样 slider 和图像就不会监听相同的事件。 </p>

<p>我已经折叠了一些函数以使示例更易于理解。</p>

<pre><code>#import &#34;C4WorkSpace.h&#34;

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

-(void)setup{

    photoTaken=;
    photoTaken.width=self.canvas.width;
    photoTaken.origin=CGPointMake(0, 0);
    ;
    ;

    zoomSlider=;
    ;
    ;

}

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

@end
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 平移识别器和 slider 之间的冲突,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/19428448/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/19428448/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - [C4]平移识别器和 slider 之间的冲突