2013-10-17 2 views
2

이미지를 상하 좌우로 확대하려고합니다. C4에서 팬 제스처를 사용할 수 없기 때문에 처음에는 슬라이더를 사용할 수 있다고 생각했습니다. 그래서 나는이 같은 사진에 팬 제스처를 추가 해요 :[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]; 
    } 

} 

난 단지 팬 제스처를 사용하고 사용자가 실제로 이미지를 탭이 아니라 어디서든 외부 (즉,이 경우 문가있을 때) 그것은 자체적으로 완벽하게 작동합니다. 또한 자체가 잘 작동

-(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)sliderWasUpdated:(C4Slider*)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; 
} 

: 그런 다음 나는 또한 같은 이미지 스케일링에 부착 된 슬라이더가 있습니다. 하지만 동시에 두 가지를 사용하려고하면 작동하지 않습니다. 이 경우 이미지를 패닝하는 것만 작동하지만 슬라이더에는 아무런 변화가 없습니다. 그것은 결코 어떤 트리거도 얻지 못하는 것 같습니다 ... 다른 사람이 내가 시도 할 수있는 제안이 있습니까?

답변

1

문제는 canvas에 팬 제스처를 추가하고 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 
+0

내가 잘못하고 있는지는 잘 모르겠지만 예제를 실행하면 팬이 작동하지만 슬라이더 값을 변경할 수는 없습니다. – suMi

+0

이상합니다. 이 코드를 새 프로젝트에 붙여 넣으면 잘 작동합니다. 새 프로젝트 또는 큰 프로젝트 내부에서 사용하고 있습니까? –

+0

나는 둘 다 시도하고 그것은 작동하지 않았다 ... iOS/XCode/어떤 차이가 있는지 .../나? – suMi

관련 문제